Hadoop 生态环境主要有hadoop 、zookeeper、hbase、hive 等构成
1.搭建Java环境
2.搭建hadoop环境,搭建成功后运行/sbin/start-all.sh即可启动所有hadoop相关服务,启动成功后有相应的进程,通过jps命令查看
3.如果需要可以进一步搭建zookeeper、hbase、hive等。其中hive搭建之前需要先安装mysql数据库。所有服务搭建成功后均有相应的进程,用jps查看。
1.Hadoop 平台环境
操作系统:CentOS-6.5-x86_64
JAVA版本:jdk-8u111-linux-x64
Hadoop版本:hadoop-2.5.2
2.安装操作操作系统
2.1 准备安装镜像
CentOS-6.5-x86_64-bin-DVD1
2.2安装教程
[安装教程](http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503770.html)
或者见自己安装截图
2.3 建立一般用户
//新增用户
#useradd hadoop
//设置密码
#passwd hadoop
2.4 关闭防火墙SELinux
关闭防火墙
//临时关闭
#service iptables stop
//永久关闭
#chkconfig iptables off
#service ip6tables stop
#chkconfig ip6tables off
关闭SELinux
#vim /etc/sysconfig/selinux
SELINUX=enforcing
|
SELINUX=disable
执行如下命令
#setenforce 0
#getenforce
3.hadoop安装
3.1 环境说明
hostname | username | IP |
---|---|---|
master | hadoop | 192.168.207.10 |
slave1 | hadoop | 192.168.207.11 |
slave2 | hadoop | 192.168.207.12 |
3.2网络配置
1.修改主机名
//查看当前主机名
#hostname
//修改当前主机名
#vim /etc/sysconfig/network
更改HOSTNAME选项
2.修改当前机器IP
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE 接口名(设备,网卡)
BOOTPROTO IP的配置方法(static:固定IP, dhcpHCP, none:手动)
HWADDR MAC地址
ONBOOT 系统启动的时候网络接口是否有效(yes/no)
TYPE 网络类型(通常是Ethemet)
NETMASK 网络掩码
IPADDR IP地址
IPV6INIT IPV6是否有效(yes/no)
GATEWAY 默认网关IP地址
要记住配置完成时,要用以下代码重新启动网络服务。
#service network restart
3.配置hosts文件(域名解析)
#vim /etc/hosts
3.3 SSH无密钥验证配置
1.SSH无密钥原理
Master(NameNode| JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Slave(DataNode|Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有Slave上。当master通过SSH连接Slave时,Slave就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。master收到加密数之后再用私钥解密,并将解密数回传给slave,slave确认解密数无误之后就允许Master进行连接了,这就是一个公钥认证的过程,期间不需要用户手工输入密码。重要过程是将客户端Master复制到slave上。
2.配置master免密钥登录slave(该过程用hadoop用户完成)
生成密钥(该过程需要在master和slave上分别执行)
//切换用户
$su hadoop
//生成密钥
$ ssh-keygen -t rsa
将id_rsa.pub
追加到授权key中(只需要将master节点的公钥追加到authorized_keys
)
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在master上更改authorized_keys
的权限
chmod 600 authorized_keys
将authorized_keys
复制到所有slave节点
$scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh/
$scp ~/.ssh/authorized_keys hadoop@slave2:~/.ssh/
测试,master免密钥登录所有slave节点
$ssh slave1
$ssh slave2
3.4 JAVA环境安装和配置
已共享文件夹的形式将JAVA软件压缩包共享到Master主机。
1.root身份进行安装,如果系统已经安装了其他版本的java请先卸载旧版,再进行安装。
//解压
#tar -zxvf jdk-8u111-linux-x64.tar.gz
//移动文件夹到/usr下并命名为java
#mv jdk1.8.0_111 /usr/java
2.配置java环境变量【替换成自己的java安装路径和版本】,这一点需要特别的注意路径
#vim /etc/profile
//在尾部追加
export JAVA_HOME=/usr/java
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
3.使配置生效
$source /etc/profile
4.验证是否安装成功
$java -version
5.安装其他机器,使用scp命令将java文件夹和profile文件复制到其他机器
scp -r /usr/java hadoop@slave1:/usr/
scp -r /usr/java hadoop@slave2:/usr/
scp -r /etc/profile hadoop@slave1:/etc/profile
scp -r /etc/profile hadoop@slave2:/etc/profile
3.5 hadoop集群安装
所有的机器上都要安装hadoop,现在就先在master'服务器上安装,然后其他服务器利用scp复制文件实现。
1.同样利用共享文件夹方式,将压缩包分享到虚拟机,解压
#tar -zvxf hadoop-2.5.2tar.gz
#mv hadoop-2.5.2 /home/hadoop/hadoop
#chown -R hadoop:hadoop /home/hadoop
2.配置环境变量(在尾部追加)
# vim /etc/profile # set hadoop environment
export HADOOP_HOME=/home/hadoop/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export CLASSPATH=.:$JAVA_HOME/lib:$HADOOP_HOME/lib:$CLASSPATH
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使环境变量立即生效,注意在哪个用户下执行该命令,环境变量在哪个用户下生效
#su hadoop
$source /etc/profile
3.配置hadoop文件
首先进入配置文件所在的文件夹:
#cd /home/hadoop/hadoop/etc/hadoop
(1)core-site.xml
#vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop/hadoop_tmp</value>
<!--需要自己创建hadoop_tmp文件夹-->
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
</configuration>
(2)hdfs-site.xml
#vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop/dfs/name</value>
<description>namenode上存储hdfs元数据</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop/dfs/data</value>
<description>datanode上数据块物理存储位置</description>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
(3)mapred-site.xml
#vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>NameNode:50030</value>
</property>
</configuration>
(4) yarn-site.xml
#vim yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1L2181,slave2:2181</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>
(5)修改slaves文件,添加datanode结点的hostname到slaves文件中
slave1
slave2
(6)hadoop-env.sh
#vim /home/hadoop/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=${JAVA_HOME}
|
export JAVA_HOME=/usr/java
export HADOOP_COMMON_LIB_NATIVE_DIR=/home/hadoop/hadoop/lib/native
(7)最后将整个/home/hadoop/hadoop文件夹及其子文件夹使用scp复制到slave的相同目录中
$ scp -r /home/hadoop/hadoop hadoop@slave1:/home/hadoop/
$ scp -r /home/hadoop/hadoop hadoop@slave2:/home/hadoop/
4.运行 hadoop
(1)格式化(*只能运行一次,如果想多次运行需要删除dfs文件夹中的data和name文件)
$hdfs namenode -format
(2)启动hadoop
$ start-dfs.sh
$ start-yarn.sh
命令来代替
$ start-all.sh
(3)jps查看进程
master主节点进程:
slave从属节点进程:
(4)通过浏览器查看集群运行状态
概览:http://192.168.207.10:50070/
集群:http://192.168.207.10:8088/
JobHistory:http://192.168.207.10:19888
jobhistory是Hadoop自带的一个历史服务器,记录Mapreduce历史作业。默认情况下,jobhistory没有启动,可用以下命令启动:
$ sbin/mr-jobhistory-daemon.sh start historyserver
5.测试hadoop
(1)建立文件
$ vim wordcount.txt
hello you
hello me
hello everyone
(2)在HDFS上建立目录
$ hadoop fs -mkdir /input
$hadoop fs -mkdir /output
(3)上传文件
$ hadoop fs -put wordcount.txt /input
(4)执行wordcount程序
$ hadoop jar /home/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-
2.5.2.jar wordcount /input /output/wordcount/
(5)查看结果
$ hadoop fs -text /output/wordcount/part-r-00000