建议配置1台,克隆两台,修改/etc/hostname即可
创建hadoop用户组和用户
创建用户组
sudo addgroup hadoop
创建用户
sudo adduser -ingroup hadoophadoop
给hadoop用户添加权限,打开/etc/sudoers文件
sudo gedit /etc/sudoers
在root ALL=(ALL)ALL行下添加ALL=(ALL:ALL) ALL。如果不添加这行,hadoop将不能执行sudo操作。
1. 配置jdk
进入在存放jdk文件夹的当前目录,将解压好的jdk1.7.0_10文件夹用最高权限复移动到/home/hadoop/tools目录里,此时即使没有tools目录也可以执行如下命令,tools文件夹将得到创建。
sudo mv jdk1.7.0_45.tar.gz /home/hadoop/tools/
接下来需要设置环境变量,进入当前用户名的主文件夹,修改.profile文件。注意,该文件是当前用户的配置文件,如果要对使用计算机的所有用户生效,那么需要设置的文件应该是 /etc/profile。
解压
tar -zxvf jdk1.7.0_45.tar.gz
重命名:
mv jdk1.7.0_45 jdk7
mv apache-maven-3.2.2 maven3.2
mv hadoop-2.6.0 hadoop2.6
mv hbase-1.1.2 hbase1
配置hadoop用户环境变量
sudo gedit ~/.bashrc
在末尾加上:
# Hadoop
exportHADOOP_PREFIX="/home/hadoop/tools/hadoop2.6"
exportPATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
#set java environment
export JAVA_HOME=/home/hadoop/tools/jdk7
export JRE_HOME=/home/hadoop/tools/jdk7/jre
export MAHOUT_HOME=/home/hadoop/tools/mahout-distribution-0.9
export MAVEN_HOME=/home/hadoop/tools/maven3.2
exportPATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$MAHOUT_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export SCALA_HOME=/home/hadoop/tools/scala2.10
export PATH=.:$PATH:$SCALA_HOME/bin
export SPARK_HOME=/home/hadoop/tools/spark1.4
export PATH=.:$PATH:$SPARK_HOME/bin:$SPARK_HOME:sbin
export HBASE_HOME=/home/hadoop/tools/hbase1
exportPATH=.:$PATH:$HBASE_HOME/bin
然后保存关闭,此时在命令行输入java -version将会仍然显示java没有安装。此时,需要使用source更新下.bashrc文件:
source ~/.bashrc
再次使用java -version命令可以看到如下输出:
到此,已经将jdk配置完成。如果之前系统里面已经安装了openjdk,可以使用如下方法将默认jdk更改过来:
3.采用桥接模式获得静态虚拟机ip
ip addr 获得该节点ip地址
在三台主机上分别设置:/etc/hosts和/etc/hostname
hosts这个文件用于定义主机名和IP地址之间的映射关系。
(修改hostname后重启虚拟机生效)
4.关闭防火墙
sudo ufw disable (关闭防火墙重启虚拟机生效)
5.换源
若出现ssh等软件无法安装,进行换源操作
1、首先备份Ubuntu14.04源列表
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表)
2、修改更新源
sudo gedit /etc/apt/sources.list(打开Ubuntu 14.04源列表文件)
在后面添加:
deb http://ubuntu.cn99.com/ubuntu/ precise mainrestricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ precise-updatesmain restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ precise-securitymain restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ precise-backportsmain restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ precise mainrestricted universe multiverse
3、sudo apt-getupdate 更新
6.安装SSH服务(建立无密码登陆本机)
安装openssh-server;
sudo apt-get install ssh
首先要转换成hadoop用户,执行以下命令:
su hadoop
1.创建ssh-key,这里我们采用rsa方式;
ssh-keygen -t rsa
(注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的)
2.进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的;
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
3. 登录localhost(master);
ssh (localhost)master
( 注:当ssh远程登录到其它机器后,现在你控制的是远程的机器,需要执行退出命令才能重新控制本地主机。)
4. 执行退出命令;
exit
将生成的authorized_keys文件拷贝到两台slave主机相同的文件夹下,命令如下:
scp authorized_keys slave1:~/.ssh/
scp authorized_keys slave2:~/.ssh/
ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。
附ssh部分命令:
重启SSH
/etc/init.d/ssh restart
确认sshserver是否启动
ps -e | grep ssh
如果只有ssh-agent那ssh-server还没有启动,需要/etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了。
7.Hadoop配置
切换为hadoop用户
su hadoop
解压hadoop到/home/hadoop/tools/
tar -zxvf hadoop-2.6.0.tar.gz /home/hadoop/tools/
将hadoop-2.6.0 改名为hadoop2.6
mv hadoop-2.6.0 hadoop2.6
进入etc下修改配置文件
cd /home/hadoop/tools/hadoop2.6/etc/hadoop
编辑hadoop-env.sh(修改JAVA_HOME的配置)
sudo gedit hadoop-env.sh
export JAVA_HOME=/home/hadoop/tools/jdk7
export HADOOP_PID_DIR=/home/hadoop/pids
编辑yarn-env.sh,在底部增加
export JAVA_HOME=/home/hadoop/tools/jdk7
export YARN_PID_DIR=/home/hadoop/pids
编辑slaves文件,在底部增加
master
slave1
slave2
编辑core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/temp</value>
</property>
</configuration>
编辑hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<!—该数值为slave节点数 -->
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<!-- 注意创建相关的目录结构 -->
<value>file:/home/hadoop/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<!-- 注意创建相关的目录结构 -->
<value>file:/home/hadoop/dfs/data</value>
</property>
</configuration>
编辑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.hostname</name>
<!-- resourcemanager hostname或ip地址-->
<value>master</value>
</property>
</configuration>
编辑mapred-site.xml
默认没有该文件
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
</configuration>
把所有Datanode节点设置可写权限(防止启动服务的时候出错)
sudo chown -R hadoop:hadoop /home/hadoop/
启动hadoop
1.第一次启动需要在master 执行format
bin/hdfs namenode -format
2.在master启动服务
sbin/start-all.sh
3.在master 验证启动进程:
4.在slave 验证启动进程:
5.打开浏览器输入:http:// master:8088 可查看相关的应用运行情况。
6. 打开浏览器输入:http://master:50070 可查看hdfs目录
7.测试
bin/hdfs dfs -ls /
bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir -p/user/micmiu/wordcount/in
创建三个文件(内容相同)
micmiu-01.txt:
micmiu-02.txt:
micmiu-03.txt:
Hi Michael welcome to Hadoop
more see micmiu.com
上传三个文件
bin/hdfs dfs -put micmiu*.txt/user/micmiu/wordcount/in
启动wordcount
bin/hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jarwordcount /user/micmiu/wordcount/in /user/micmiu/wordcount/out
查看结果输出out文件
bin/ hdfs dfs -
cat
/user/micmiu/wordcount/out/part-r-00000
8.安装HBase1.1.2
首先登陆官网:
http://apache.fayea.com/hbase/stable/
下载最新版本,这里选取的是hbase1.1.2版本,切换为hadoop用户
su hadoop
解压hadoop到/home/hadoop/tools/
tar -zxvf hbase-1.1.2-bin.tar.gz /home/hadoop/tools/
将hbase-1.1.2 改名为hbase1
mv hbase-1.1.2 hbase1
进入etc下修改配置文件
cd /home/hadoop/tools/hbase1/conf
编辑hbase-env.sh,在底部增加
# The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/home/hadoop/tools/jdk7
export HBASE_MANAGES_ZK=true
export HBASE_PID_DIR=/home/hadoop/pids
编辑regionservers文件,在底部增加
master
slave1
slave2的IP地址:
编辑hbase-site.sh,在底部增加
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>192.168.16.128:60010</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.16.128,192.168.16.129, 192.168.16.130</value>
</property>
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase</value>
</property>
</configuration>
在浏览器中输入http://192.168.16.128:16030/rs-status,如图则配置成功:
附录:遇到的部分问题总结
1. slave节点的DataNode自动关闭问题
原因:Namenode上namespaceID与datanode上namespaceID不一致。
每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,所以造成namenode节点上的namespaceID与datanode节点上的namespaceID不一致。启动失败。
解决方案:
(1)停掉集群服务
(2)在出问题的datanode节点上删除data目录,data目录即是在hdfs-site.xml文件中配置的dfs.data.dir目录,本机器上那个是/var/lib/hadoop-0.20/cache/hdfs/dfs/data/
(3)格式化namenode.
(4)重新启动集群。
jps查看结点启动情况没有NameNode结点
一种原因是在core-site.xml中指定了如下配置:
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop/hadoop-${user.name}</value>
</property>
但是tmp会在启动的时候清空,而dfs的数据就会变得不一致,导致启动失败,可以重新更改位置:
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/hadoop-${user.name}</value>
</property>
然后执行: hadoop namenode -format 命令(由于namenode数据存储目录变更,namenode需要重新格式化)
重启后即可。
3. 运行wordcount时权限不足
解决方案:
在配置hdfs-site.xml中增加配置代码:
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
4. 解除安全模式
解决方案:
hadoopdfsadmin -safemode leave