Hadoop 为分布式搭建练习,hadoop搭建


课程时长:8天

Ø 第一天

l Hadoop简介(***了解***)

l Linux环境准备(***熟练掌握***)

l 搭建Hadoop的伪分布环境(***熟练掌握***)

l Hadoop环境测试(***熟练掌握***)

l SSH免密码登录的配置和原理(***理解***)

Ø 第二天

l 分布式文件系统与HDFS(***了解****)

l HDFS体系结构与基本概念(***了解****)

l HDFS的shell操作(***了解****)

l java接口及常用api(***熟练掌握****)

l HADOOP的RPC机制(***理解清楚****)

l HDFS源码分析(***熟练掌握****)

l 远程debug(***熟练掌握****)

Ø 第三天

l MapReduce原理(***理解掌握***)

l MapReduce执行过程(****理解掌握***)

l 数据类型与格式(***熟练掌握***)

l Writable接口与序列化机制(***了解并理解***)

l MapReduce的执行过程源码分析(***加深扩展***)

Ø 第四天

l Partitioner编程(***熟练掌握***)

l 自定义排序编程(***熟练掌握****)

l Combiner编程(****熟练掌握*****)

l 常见的MapReduce算法(****了解&理解****)

l Mapreduce原理及源码分析(***加深扩展****)

Ø 第五天

l Hadoop集群的搭建过程(***掌握****)

l 集群管理的常用命令(****了解****)

l 集群的副本管理机制(***了解***)

l 集群的监控管理(***理解****)

l sqoop框架(***掌握***)

l pig框架(***了解***)

l Zookeeper(****掌握****)

Ø 第六天

HBASE:

n HBASE基础知识(***了解****)

n HBASE的伪分布的搭建(****掌握****)

n HBASE Shell(****掌握****)

n HBASE的Java客户端(****了解*****)

n HBASE的集群的搭建(****加深拓展*****)

n HBASE的表设计(*****加深拓展******)

n HBASE的底层存储模型(******加深拓展*******)

Hive:

n Hive简介(***了解****)

n Hive的安装与管理(****掌握****)

n HiveQL数据类型,表以及表的操作(****掌握****)

n HiveQL查询数据(****掌握****)

n Hive的Java客户端(***了解****)

n Hive的自定义函数UDF(******加深拓展*******)

Ø 第七天

Storm:

n Storm 简介(***了解****)

n Storm 体系结构(***了解****)

n Storm topology supovisor worker(****掌握****)

n Storm 安装部署(****掌握****)

n Storm 常用命令(***了解****)

n Storm 编程接口(******加深拓展*******)

n Storm 运行机制(******加深拓展*******)

l Kafka

n Kafka简介(***了解****)

n Kafka架构(****理解掌握****)

n Kafka应用编程指南(******加深拓展*******)

Ø 第八天

l Hadoop项目实践(电信运营商流量经营系统)(*****项目练习****)

Hadoop Day1

1.Hadoop简介(****了解***)

Ø hadoop是什么?

What Is Apache Hadoop?

The Apache™ Hadoop® project develops open-source software for reliable, scalable, distributed computing.

Hadoop是开源的,可靠的,可扩展的,分布式的运算存储系统。

备注:用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。

Ø Hadoop能解决什么问题?(***记住***)

l 海量数据的存储(HDFS)

l 海量数据的分析(MapReduce)

l 资源管理调度(YARN)

Ø hadoop来源与历史(****了解***)

l Hapdoop是Google的集群系统的开源实现

-Google集群系统:

GFS(Google File System) 、MapReduce、BigTable

-Hadoop主要由HDFS(Hadoop Distributed File System即hadoop分布式文件系统)、MapReduce和Hbase组成。

l Hadoop的最初是为了解决Nutch的海量数据爬取和存储需要。

l Hadoop在2005年秋天作为Lucene的子项目Nutch的一部分正式引入Apache基金会。

Ø hadoop具体能干什么(***知道****)

hadoop擅长日志分析

l facebook就用Hive来进行日志分析,2009年时facebook就有非编程人员的30%的人使用HiveQL进行数据分析.

l 淘宝搜索中的自定义筛选也使用的Hive;利用Pig还可以做高级的数据处理,包括Twitter、LinkedIn 上用于发现您可能认识的人,可以实现类似Amazon.com的协同过滤的推荐效果。淘宝的商品推荐也是!

l 在Yahoo!的40%的Hadoop作业是用pig运行的,包括垃圾邮件的识别和过滤,还有用户特征建模。(2012年8月25新更新,天猫的推荐系统是hive,少量尝试mahout!)

Ø 哪些公司使用hadoop(***了解***)

l Hadoop被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop开发工具、开源软件、商业化工具和技术服务。

比较大型IT公司如EMC、Microsoft、Intel、Teradata、Cisco都明显增加了Hadoop方面的投入。

l 在淘宝:

n 从09年开始,用于对海量数据的离线处理,例如对日志的分析,交易记录的分析

n 规模从当初的3~4百台节点,增加到现在的一个集群有3000个节点,淘宝现在已经有2~3个这样的集群

n 在支付宝的集群规模也有700台节点,使用Hbase对用户的消费记录可以实现毫秒级查询

Ø Hadoop生态地图(***了解***)

1.这一切是如何开始的—Web上庞大的数据!

2.使用Nutch抓取Web数据

3.要保存Web上庞大的数据——HDFS应运而生

4.如何使用这些庞大的数据?

5.采用Java或任何的流/管道语言构建MapReduce框架用于编码并进行分析

6.如何获取Web日志,点击流,Apache日志,服务器日志等非结构化数据——fuse,webdav, chukwa, flume, Scribe

7.Hiho和sqoop将数据加载到HDFS中,关系型数据库也能够加入到Hadoop队伍中

8.MapReduce编程需要的高级接口——Pig, Hive, Jaql

9.具有先进的UI报表功能的BI工具- Intellicus

10.Map-Reduce处理过程使用的工作流工具及高级语言

11.监控、管理hadoop,运行jobs/hive,查看HDFS的高级视图—Hue, karmasphere, eclipse plugin, cacti, ganglia

12.支持框架—Avro (进行序列化), Zookeeper (用于协同)

13.更多高级接口——Mahout, Elastic map Reduce

14.同样可以进行Hbase

备注:
HIHO传统数据库和hdfs进行数据交换https://github.com/sonalgoyal/hiho/
Sqoop传统数据库和hdfs进行数据交换,目前支持cloudera版本的hadoop,项目主页:https://github.com/cloudera/sqoop
Flume日志实时传输整合工具,项目主页:https://github.com/cloudera/flume
flumebase给予flume 的实时数据流查询分析工具,目前还是测试版本,项目主页:flumebase.org
DataStax发布了Brisk,一款新的分布式平台,它增强了Hadoop和Hive平台的可伸缩性低延迟数据功能。这使得Brisk成为唯一一个既能够作为低延迟数据库处理海量网络数据和实时应用,又能够紧密结合Hadoop和Hive的分析功能的平台。
karmasphere基于hadoop的数据分析软件,商业软件,有社区版:http://www.karmasphere.com/Buy-karmasphere-studio-product-family.html,社区版不包含analysis
HBase是一个分布式的、面向列的开源数据库http://hbase.apache.org/
 
 

Ø Hadoop版本(***了解***)

l Apache hadoop官方网址http://hadoop.apache.org/

官方目前最高版本(2.7.0)

备注:下载地址http://hadoop.apache.org/releases.html

官方提供的包有两种:

一:source包,也就是源码包要求自已编译安装的包

二:binary包,32位编译后的包,可以直接使用的包。

注意:官方只提供32位环境编译的包,只能运行在32位机器上.生产环境一般是64位操作系统,要求自已编译源码包进行安装。

另外下载所有版本网址:http://archive.apache.org/dist/hadoop/

其中http://archive.apache.org/dist这部分是apache开源的所有项目地址,而http://archive.apache.org/dist/hadoop/ 是hadoop项目的地址。

l Cloudera

使用下载最多的版本,稳定,有商业支持,在Apache的基础上打上了一些patch。推荐使用。

l HDP(Hortonworks Data Platform)

Hortonworks公司发行版本。

Ø hadoop1.0和hadoop2.0的对比(****记住***)

l 早期版本两大核心

l 后期版本两大核心

Ø Hadoop的特点(***了解***)

l 扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。

l 成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。

l 高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。

l 可靠性(Reliable):hadoop能自动地维护数据的多份副本,并且在任务失败后能自动地重新部署(redeploy)计算任务。

Ø Hadoop部署方式(***了解***)

l 本地模式

l 伪分布模式

l 集群模式

2.Linux环境准备(***必须掌握****)

安装VMWare软件

详细安装文档见资料文件夹附件:虚拟机Vmware安装.doc

在VMWare软件下linux系统

详细安装文档见资料文件夹见附件:CentOS6详细安装文档.doc

配置VMWare虚拟软件网卡,保证Windows机器能和虚拟机linux正常通信

Ø 点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip 设置网段:192.168.0.0 子网掩码:255.255.255.0 -> apply -> ok

Ø 回到windows --> 打开网络和共享中心 -> 更改适配器设置 -> 右键VMnet1 -> 属性 -> 双击IPv4 -> 设置windows的IP:192.168.0.100 子网掩码:255.255.255.0 -> 点击确定

Ø 在虚拟软件上 --My Computer -> 选中虚拟机 -> 右键 -> settings -> network adapter -> host only -> ok

修改主机名

vim /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=itcast01 ###

设置linux机器IP

Ø 第一种:通过Linux图形界面进行修改(普通程序员专用)

进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 -> method选择为manual -> 点击add按钮 -> 添加IP:192.168.0.2 子网掩码:255.255.255.0 网关:192.168.0.1 -> apply

Ø 第二种:修改配置文件方式(屌丝程序员专用)

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

BOOTPROTO="static" ###

HWADDR="00:0C:29:3C:BF:E7"

IPV6INIT="yes"

NM_CONTROLLED="yes"

ONBOOT="yes"

TYPE="Ethernet"

UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"

IPADDR="192.168.0.2" ###

NETMASK="255.255.255.0" ###

GATEWAY="192.168.0.1" ###

修改主机名和IP的映射关系

vim /etc/hosts

192.168.0.2 itcast01

关闭防火墙

#查看防火墙状态

service iptables status

#关闭防火墙

service iptables stop

#查看防火墙开机启动状态

chkconfig iptables --list

#关闭防火墙开机启动

chkconfig iptables off

查看开机启动服务

chkconfig --list

重启系统

reboot

安装JDK

Ø 上传

Ø 解压jdk

#创建文件夹

mkdir /usr/java

#解压

tar -zxvf jdk-7u79-linux-i586.tar.gz -C /usr/java/

Ø 将java添加到环境变量中

vim /etc/profile

#在文件最后添加

JAVA_HOME=/usr/java/jdk1.7.0_79

export PATH=$JAVA_HOME/bin:$PATH

#刷新配置

source /etc/profile

3搭建Hadoop的伪分布环境(***必须掌握***)

上传hadoop2.7.0编译后的包并解压到/itcast目录下

mkdir /itcast

解压

tar -zxvf hadoop.2.7.0.tar.gz -C /itcast

配置hadoop

注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop

伪分布式需要修改5个配置文件

第一个:hadoop-env.sh

vim hadoop-env.sh

#第27行

export JAVA_HOME=/usr/java/jdk1.7.0_79

第二个:core-site.xml

<!--指定fs的默认名称-->

<property>

<name>fs.default.name</name>

<value>hdfs://itcast01:9000</value>

</property>

<!-- 指定HDFS的老大(NameNode)的地址 -->

<property>

<name>fs.defaultFS</name>

<value>hdfs://itcast01:9000</value>

</property>

<!-- 指定hadoop运行时产生文件的存储目录 -->

<property>

<name>hadoop.tmp.dir</name>

<value>/itcast/hadoop-2.7.0/tmp</value>

</property>

第三个:hdfs-site.xml

<!-- 指定HDFS副本的数量 -->

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)

mv mapred-site.xml.template mapred-site.xml

vim mapred-site.xml

<!-- 指定mr运行在yarn上 -->

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

第五个:yarn-site.xml

<!-- 指定YARN的老大(ResourceManager)的地址 -->

<property>

<name>yarn.resourcemanager.hostname</name>

<value>itcast01</value>

</property>

<!-- reducer获取数据的方式 -->

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

将hadoop添加到环境变量

vim /etc/profile

内容如下:

JAVA_HOME=/usr/java/jdk1.7.0_79

HADOOP_HOME=/itcast/hadoop-2.4.1

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

让配置生效:

source /etc/profile

格式化namenode(是对namenode进行初始化)

hdfs namenode -format 或者 hadoop namenode -format

启动hadoop

Ø 先启动HDFS

sbin/start-dfs.sh

Ø 再启动YARN

sbin/start-yarn.sh

验证是否启动成功

使用jps命令验证

27408 NameNode

28218 Jps

27643 SecondaryNameNode

28066 NodeManager

27803 ResourceManager

27512 DataNode

http://192.168.0.2:50070 (HDFS管理界面)

http://192.168.0.2:8088 (MR管理界面)

备注:存在一种情况datanode没有启动,

解决方法:

查看日志文件显示:

(Datanode Uuid unassigned) service to localhost/127.0.0.1:8020 starting to offer service
2014-12-22 12:08:33,001 INFO org.apache.hadoop.ipc.Server: IPC Server Responder: starting
2014-12-22 12:08:33,003 INFO org.apache.hadoop.ipc.Server: IPC Server listener on 50020: starting

2014-12-22 12:08:33,536 INFO org.apache.hadoop.hdfs.server.common.Storage: DataNode version: -56 and NameNode layout version: -60

2014-12-22 12:08:33,699 INFO org.apache.hadoop.hdfs.server.common.Storage: Lock on /home/hadoop/tmp/dfs/data/in_use.lock acquired by nodename 17247@henry-ThinkPad-T400
2014-12-22 12:08:33,706 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to localhost/127.0.0.1:8020. Exiting.
java.io.IOException: Incompatible clusterIDs in /home/hadoop/tmp/dfs/data: namenode clusterID = CID-19f887ba-2e8d-4c7e-ae01-e38a30581693; datanode clusterID = CID-14aac0b3-3c32-45db-adb8-b5fc494eaa3d
       at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:646)


从日志上看,加粗的部分说明了问题


出现该问题的原因:在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时namenode的clusterID会重新生成,而datanode的clusterID 保持不变。


datanode的clusterID 和 namenode的clusterID 不匹配。

根据日志中的路径,cd /itcast/hadoop/tmp/dfs

能看到 data和name两个文件夹,将name/current下的VERSION中的clusterID复制到data/current下的VERSION中,覆盖掉原来的clusterID,让两个保持一致。然后重启,启动后执行jps,再次查看进程




4.Hadoop环境测试(***必须掌握***)

Ø 测试HDFS

n HDFS shell操作

#查看帮助

hadoop fs -help <cmd>

#上传

hadoop fs -put <linux上文件> <hdfs上的路径>

#查看文件内容

hadoop fs -cat <hdfs上的路径>

#查看文件列表

hadoop fs -ls /

#下载文件

hadoop fs -get <hdfs上的路径> <linux上文件>

上传文件到hdfs文件系统上

hadoop fs -put <linux上文件> <hdfs上的路径>

例如:hadoop fs -put /root/install.log hdfs://itcast01:9000/

删除hdfs系统文件

hadoop fs -rmr hdfs://itcast01:9000/install.log

注:如果能正常上传和删除文件说明HDFS没问题。

Ø 测试Yarn

上传一个文件到HDFS

hadoop fs -put words.txt hdfs://itcast01:9000/

让Yarn来统计一下文件信息

cd /$HADOOP_HOME/etc/hadoop/share/hadoop/target/mapreduce/

#测试命令

hadoop jar hadoop-mapreduce-examples-2.7.0.jar wordcount /works.txt hdfs://itcast01:9000/wc

注:如果能正常生成一个目录,并把统计信息输出到文件夹下,说明Yarn没问题。

5.SSH免密码登录原理(***理解***)

Ø SSH简介

SSH(Secure Shell的缩写):是建立在应用层和传输层基础上的安全协议。

SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。

利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

Ø SSH的使用

无选项参数运行 SSH

ssh 192.168.0.2

注意:当你第一次使用ssh登录远程主机时,会出现没有找到主机密钥的提示信息。如果你回答的是 NO,SSH 将不会继续连接,只有回答 Yes才会继续。输入"yes"后,系统会将远程主机的密钥加入到你的主目录下的 .ssh/hostkeys下,这样你就可以继续操作了。下一次再登陆此主机时,SSH 就不会提示确认消息了。对此主机的真实验证信息已经默认保存在每个用户的 /用户主目录/.ssh 文件里。

指定登陆用户

ssh -l root 192.168.0.2或者 ssh root@192.168.0.2

指定端口

SSH 默认使用的端口号是 22。大多现代的 Linux 系统 22 端口都是开放的。如果你运行 ssh 程序而没有指定端口号,它直接就是通过 22 端口发送请求的。

一些系统管理员会改变 SSH 的默认端口号。就要使用 -p 选项,后面在加上 SSH 端口号。

ssh root@192.168.0.2 -p 1234

Ø SSH免密码登录原理(****理解*****)

非对称加密算法

在日常的工作生产中, 我们经常需要进行数据的通讯,开发人员经常需要对数据进行加解密操作,以保证数据的安全。数据的加密算法非为对称加密和非对称加密两种,常用的DES、三重DES、AES等都属于对称加密,即通过一个密钥可以进行数据的加解密,密钥一旦泄漏,传输的数据则不安全。

非对称加密算法的核心源于数学问题,它存在公钥和私钥的概念,要完成加解密操作,需要两个密钥同时参与。我们常说的“公钥加密,私钥加密”或“私钥加密, 公钥解密”都属于非对称加密的范畴,后文中讲到的RSA算法也一种典型的非对称加密算法。公钥加密的数据必须使用私钥才可以解密,同样,私钥加密的数据也 只能通过公钥进行解密。

相比对称加密,非对称加密的安全性得到了提升,但是也存在明显的缺点,非对称加解密的效率要远远小于对称加解密。所以非对称加密往往被用在一些安全性要求比较高的应用或领域中。

在SSH安全协议的原理中, 是一种非对称加密与对称加密算法的结合:

说明:

1.首先在itcast01上ssh-keygen -t rsa生成一对钥匙id_rsa(私钥)和id_rsa.pub(公钥)

2.Itcast01执行ssh-copy-id client 在client端生成autherired_keys文件并保存了itcast01机器上的id_rsa.pub信息内容

3.Itcast01向client发送一个ssh请求

4.请求在传输中带有itcast01机器发送的指令信息,指令信息如(root@itcast+指令等)

5.Client接收到itcast01的信息后,会根据(root@itcast+指令等)到authorized_keys中进行查找,如果没找到,向itcast返回需要输入密码,如果找到client会随机生成一个字符串,自已保存一份,然后使用itcast01的公钥进行加密。

6.将加密后的字符串发送给itcast01

7.Itcast01接收到加密后的字符串,用自已的私钥进行解密。

8.将解密后的字符串再发送给client

9.Client接收itcast01发送的解密后的字符串与原来的字符串进行比对,如果一致,可以免密码登录。

6.SSH免密码登录的配置(***必须掌握***)

生成ssh免登陆密钥

#进入到我的home目录

cd ~/.ssh

ssh-keygen -t rsa (四个回车)

执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

新建一个authorized_keys文件夹

touch authorized_keys

修改authorized_keys文件的权限

chmod 600 authorized_keys

将公钥拷贝到要免登陆的机器上

ssh-copy-id localhost

(cat ../id_rsa.pub >> ./authorized_keys)

|hadoop中启动hdf和yarn命令免密是将公钥放到本地机器上

cat id_rsa.pub >> authorized_keys

ssh +本机名(测试是否需要密码)



相关内容