三.Hadoop安装
1. 配置多台虚拟机来搭建一个Hadoop集群。
a) 一台作为 namenode 节点
b) 其他作为 datanode 节点
c) 虚拟机使用 仅主机模式连入网络。
三种连入网络方式说明:
i. 桥接模式:
1. 会直接分配一个物理地址,与主机是同一等级的。
ii. NAT模式:
1. 共享主机的IP地址,
iii. 仅主机模式
桥接模式和仅主机模式的主动分配的,NAT模式的IP是自动分配的。
d) 在Windows网络连接中打开VMnet1来配置虚拟机的IPv4,然后登陆虚拟机,进行IP配置。注意勾选自动连接,否则登陆时需要手动连接才能分配IP,使用 ifconfig命令查看配置情况。
i. 远程登陆工具:putty,XShell,PieTTY,一般常用XShell。
ii. 文件传输工具,WinSCP,可以进行windows与linux两个操作系统下文件的互传。
2. Hadoop相关文件的配置
a) 使用WinSCP文件将 hadoop-2.2.0-x64.tar.gz和jdk-8u92-linux-x64.tar.gz 两个文件传入linux系统中(一个java ,一个Hadoop的),放置在/usr/local中
b) 使用 tar –zvxf jdk-8u92-linux-x64.tar.gz进行解压缩,之后可以将名字更改的简单些。
使用 tar –zvxf jdk-8u92-linux-x64.tar.gz进行解压缩,使用 mv 指令将 解压后的文件移动到 /home/hadoop/下,并进行更名操作。
c) 目录规划
i. 创建程序存储目录/home/hadoop/hodoop2.2,用来存储Hadoop程序文件
ii. 创建数据存储目录/home/hadoop/hodoop2.2/hdfs,用来存储集群数据
iii. 创建目录/home/hadoop/hodoop2.2/hdfs/name,用来存储文件系统元数据
iv. 创建目录/home/hadoop/hodoop2.2/hdfs/data,用来存储真正的数据
v. 创建日志目录/home/hadoop/hodoop2.2/logs,用来存储日志信息
vi. 创建临时目录/home/hadoop/hodoop2.2/tmp,用来存储临时生成的文件
例:mkdir –p /home/hadoop/hodoop2.2
d) 导入JDK环境变量
i. 执行 cd /etc命令后执行 vi profile ,对profile进行编辑
ii. 在末尾插入:
export JAVA_HOME=/usr/local/jdk1.8
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=.:$JAVA_HOME/bin:$PATH
使用 :wq退出后执行 source profile 使其配置立即生效
执行 java-version 查看是否安装成功
e) 导入 Hadoop环境变量
i. 更改profile 文件
export JAVA_HOME=/usr/local/jdk1.8
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export HADOOP_HOME=/home/hadoop/hadoop2.2
export PATH=.:$HADOOP_HOME/sbin:HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
export HADOOP_LOG_DIR=/home/hadoop/hadoop2.2/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
使用 :wq退出后执行 source profile 使其配置立即生效
执行 hadoop 查看是否安装成功
注:在不同的路径下执行hadoop时,有的可能会显示 command not found,此时重启机器再测试。
3. 修改 Hadoop2.2配置文件
a) /home/hadoop/hadoop2.2下的 hadoop-env.sh、yarn-enc.sh、mapred-env.sh 修改JAVA_HOME值(export JAVA_HOME=/usr/local/jdk1.8/)
b) 配置/home/hadoop/hadoop2.2/etc/slaves,这个文件里保存所有slave节点(只存datanode)
c) 配置 /home/hadoop/hadoop2.2/etc/hadoop/core-site.xml 添加一下代码到文中。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://yufan:9000/</value>
<description>设定namenode的主机名及端口</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop2.2/tmp</value>
<description> 存储临时文件的目录</description>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
</configuration>
d) 配置 /home/hadoop/hadoop2.2/etc/hadoop/hdfs-site.xml 添加一下代码到文中。
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>yufan:50070</value>
<description>NameNode地址和端口</description>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>yufan1:50090</value>
<description>SecondNameNode地址和端口</description>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
<description>设定HDFS存储文件的副本个数,默认为3</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/hadoop2.2/hdfs/name</value>
<description>用来持续存储命名空间和交换日志的本地系统路径</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/hadoop2.2/hdfs/data</value>
<description> DataNode 在本地存储块文件的目录列表</description>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///home/hadoop/hadoop2.2/hdfs/namesecondary</value>
<description>设置secondarynamenode存储临时镜像本地文件系统路径,如果这是一个用逗号隔开的文件列表,则镜像将会冗余复制到所在目录
</description>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
<description>是否允许网页浏览HDFS文件</description>
</property>
<property>
<name>dfs.stream-buffer-size</name>
<value>131072</value>
<description>默认是4KB,作为Hadoop缓冲区,用于Hadoop读HDFS的文件和写HDFS的文件,还有map的输出都用到了这个缓冲区容量,对于现在的硬件,可以设置为128(131072),甚至是1MB(太大了map和reduce任务可能会内存溢出)
</description>
</property>
</configuration>
e) 配置 /home/hadoop/hadoop2.2/etc/hadoop/ mapred-site.xml.template 添加一下代码到文中。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>yufan:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>yufan:19888</value>
</property>
</configuration>
f) 配置 /home/hadoop/hadoop2.2/etc/hadoop/yarn-site.xml 添加一下代码到文中。
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>yufan</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>yufan:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>yufan:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>yufan:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>yufan:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>yufan:8088</value>
</property>
</configuration>
4. 修改CentOS主机名
a) 执行 命令 hostname yufan (只适应于当前状态)
b) 执行命令 vi /etc/sysconfig/network,修改HOSTNAME=yufan
5. 绑定hostname与 IP
a) 执行命令: vi /etc/hosts,增加内容如下(不要动现有的东西)
6. 关闭防火墙
a) 执行命令 :service iptables stop
b) 验证防火墙关闭 :service iptables status
c) 上述命令执行完,但重启后还会继续开启防火墙,所以要设置关闭防火墙的自动运行
d) 执行命令:chkconfig iptables off
e) 验证命令 chkconfig –list|grep iptables
7. 节点之间的免密码通信
a) 赋值虚拟机节点。(克隆)
b) scp 实现不同虚拟机之间文件的互传
i. scp fromAdd toAdd 及把fromAdd 文件复制到toAdd中
首次传输时需要输入密码
c) 配置SSH免密码登录
i. 生成公钥:执行 ssh-keygen –-t rsa –-P ‘’ –-f ~/.ssh/id_rsa
注意P 为大写 执行完后将生成id_rsa.pub和id_rsa两个文件,前者是公钥,后者是私钥。
ii. 远程主机将用户的公钥保存在登录的用户主目录的$HOME/.ssh/authorized_keys文件中,执行
cd ~/.ssh/
ls
cat id__rsa.pub >>authorized_keys 生成authorized_keys
chmod 600 authorized_keys 设置权限
ssh localhost 用ssh登录本机,验证无密码登录是否成功
exit 退出ssh登录
iii. 复制公钥到其中一个节点。使一个节点下的authorized_keys文件拥有整个集群的所有公钥
ssh-copy-id –I ~/.ssh/id_rsa.pub yufan2
(需要输入yufan2的密码)
iv. 查 yufan2的authorized_keys文件是否拥有整个集群的所有公钥,不符合按照上述要求添加
v. 远程复制authorized_keys文件
scp /root/.ssh/authorized_keys yufan: /root/.ssh/authorized_keys;
scp /root/.ssh/authorized_keys yufan1: /root/.ssh/authorized_keys
vi. 这样节点间的免密码登录就完成了
8. Hadoop的启动和测试
a) 格式化文件系统
i. hadoop namenode –format
出现 “Exiting with status 0”表示格式化成功,返回“Exiting with status 1”表示格式化失败,此时需要好好看下错误提示。
b) 启动HDFS
i. start-dfs.sh 开启Hadoop HDFS服务。
若未正常开启,请仔细检查配置文件是否出错。
ii. 使用jps在各节点上验证
namnode:
datanode(SecondaryNameNode):
datanode:
注:若存在节点无法正常启动,此时将该节点此前创建的配置文件全部删除后再重新创建,之后进行格式化,重新开启hdfs后再进行测试。
iii. 启动Yarn
1. 在主节点namenode上启动start-yarn.sh
2. 使用jps 测试
iv. 管理JobHistory Server,通过 Web控制台查看集群计算的任务的信息,执行以下命令:mr-jobhistory-daemon.sh start historyserver