1.Hadoop
http://mirrors.cnnic.cn/apache/hadoop/common/
版本众多,有0.2.x,1.0.x,,1.2.x,2.0.x,2.2.x,2.3.x。在安装是需要考虑各个版本的和其他产品的兼容性,比如hbase,hive,pig。现在官网上的稳定版本是2.2.0.
本次采用安装2.3.x
1、这里我们搭建一个由三台机器组成的集群:
10.3.216.79 ubuntu/123456 hadoop.main nn/snn/rm ubuntu 64bit
10.3.216.78 ubuntu/123456 hadoop.slave1 dn/nm ubuntu 64bit
10.3.216.77 ubuntu/123456 hadoop.slave2 dn/nm ubuntu 64bit
1.1 上面各列分别为IP、user/passwd、hostname、在cluster中充当的角色(namenode, secondary namenode, datanode , resourcemanager, nodemanager)
1.2 Hostname可以在/etc/hostname中修改(ubuntu是在这个路径下,redhat稍有不同)
1.3 这里我们为每台机器新建了一个账户ubuntu.这里需要给每个账户分配sudo的权限。
2、修改/etc/hosts 文件,增加三台机器的ip和hostname的映射关系
10.3.216.79 hadoop.main
10.3.216.78 hadoop.slave1
10.3.216.77 hadoop.slave2
3、打通main到slave1、slave2的SSH无密码登陆
3.1 安装ssh
一般系统是默认安装了ssh命令的。如果没有,或者版本比较老,则可以重新安装:
sodu apt-get install ssh
3.2设置local无密码登陆
安装完成后会在~目录(当前用户主目录,即这里的/home/ubuntu)下产生一个隐藏文件夹.ssh(ls -a 可以查看隐藏文件)。如果没有这个文件,自己新建即可(mkdir .ssh)。
具体步骤如下:
1、 进入.ssh文件夹
2、 ssh-keygen -t rsa 之后一路回 车(产生秘钥)
3、 把id_rsa.pub 追加到授权的 key 里面去(cat id_rsa.pub >> authorized_keys)
4、 重启 SSH 服 务命令使其生效 :service sshd restart(这里RedHat下为sshdUbuntu下为ssh)
此时已经可以进行ssh localhost的无密码登陆
【注意】:以上操作在每台机器上面都要进行。
3.3设置远程无密码登陆
这里只有main是master,如果有多个namenode,或者rm的话则需要打通所有master都其他剩余节点的免密码登陆。(将main的authorized_keys追加到slave1和salve2的authorized_keys)
进入main的.ssh目录
scp authorized_keys [email protected]:~/.ssh/ authorized_keys_from_main
进入slave1的.ssh目录
cat authorized_keys_from_main>> authorized_keys
至此,可以在main上面ssh [email protected]进行无密码登陆了。slave2的操作相同
其他的,需要安装jdk,注意需要选择和unbuntu64bit合适的版本。
第三部分 Hadoop 2.2安装过程
由于hadoop集群中每个机器上面的配置基本相同,所以我们先在namenode上面进行配置部署,然后再复制到其他节点。所以这里的安装过程相当于在每台机器上面都要执行。但需要注意的是集群中64位系统和32位系统的问题。
1、 解压文件
将第一部分中下载的hadoop-2.3.0-src.tar.gz解压到/opt路径下(或者将在64位机器上编译的结果存放在此路径下)。然后为了节省空间,可删除此压缩文件,或将其存放于其他地方进行备份。
切换root
su - root
chmod -R 777 /opt(每台机器都要操作)
解压
tar -xzvf hadoop-2.3.0-src.tar.gz
mv hadoop-2.3.0-src hadoop
注意:每台机器的安装路径要相同!!
由于是64位系统,需要自行编译hadoop并提前安装以下软件
protobuf
cmake
findbugs
ant
maven
gc
gc-cc++
以上各种google
2、 hadoop配置过程
配置之前,需要在main本地文件系统创建以下文件夹:
~/${HADOOP_HOME}/name
~/${HADOOP_HOME}/data
~/${HADOOP_HOME}/temp
这里要涉及到的配置文件有7个:
~/hadoop/etc/hadoop/hadoop-env.sh
~/hadoop/etc/hadoop/yarn-env.sh
~/hadoop/etc/hadoop/slaves
~/hadoop/etc/hadoop/core-site.xml
~/hadoop/etc/hadoop/hdfs-site.xml
~/hadoop/etc/hadoop/mapred-site.xml
~/hadoop/etc/hadoop/yarn-site.xml
以上个别文件默认不存在的,可以复制相应的template文件获得。
配置文件1:hadoop-env.sh
修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.7.0_40)
配置文件2:yarn-env.sh
修改JAVA_HOME值(exportJAVA_HOME=/usr/java/jdk1.7.0_40)
配置文件3:slaves (这个文件里面保存所有slave节点)
写入以下内容:
hadoop.slave1
hadoop.slave2
配置文件4:core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.main:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
配置文件5:hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop.main:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
配置文件6:mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop.main:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop.main:19888</value>
</property>
</configuration>
配置文件7:yarn-site.xml
<configuration>
<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>hadoop.main:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop.main:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop.main:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value> hadoop.main:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value> hadoop.main:8088</value>
</property>
</configuration>
3、复制到其他节点
这里可以写一个shell脚本进行操作(有大量节点时比较方便)
cp2slave.sh
#!/bin/bash
4、启动验证
4.1 启动hadoop
配置环境变量
su - root
vi /etc/profile
JAVA_HOME=/usr/lib/jdk/jdk1.7.0_45
JRE_HOME=/usr/lib/jdk/jdk1.7.0_45/jre
HADOOP_HOME=/opt/hadoop/
PATH=$HBASE_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
HBASE_HOME=/opt/hbase
MAVEN_HOME=/opt/maven
PATH=$MAVEN_HOME/bin:$HBASE_HOME/bin:$PATH
FINDBUGS_HOME=/opt/findbugs202
PATH=$FINDBUGS_HOME/bin:$PATH
ANT_HOME=/opt/ant
PATH=$ANT_HOME/bin:$PATH
:wq
. /etc/profile
格式化namenode /hdfs namenode –format
启动hdfs: start-all.sh
此时在001上面运行的进程有:
15488 NameNode
15951 ResourceManager
15388 Jps
15773 SecondaryNameNode
9036 HMaster
slave1和slave2上面运行的进程有:
25747 Jps
8231 DataNode
22304 HRegionServer
8463 NodeManager
查看集群状态:./bin/hdfs dfsadmin –report
查看文件块组成: ./bin/hdfsfsck / -files -blocks
查看HDFS: http://10.3.216.79:50070
查看RM: http://10.3.216.79:8088
4.2 运行示例程序:
先在hdfs上创建一个文件夹