Ubuntu 12.04搭建hadoop2.0.4
最近有点空闲时间 ,所以想搞一下hadoop,网上一搜资料才发现都是很老的版本,本人的毛病是想学一个新东西就学它的最新版本,因为最新版本一般是功能最新最多的版本,有点有点强迫症的感觉,虽然我也知道这个习惯不好,因为最新版本的资料不好找 ,导致浪费了好多时,但是因为自己的强迫症 还是硬头皮挑了个最新的版本来学,总结了一下网上的资料和自己的操作 分享给大家,希望对大家有帮助 ,但愿不是误人子弟; 因为是新手,遇到了好多问题,也希望大家帮帮忙,本人在安装的时候一直不知道怎么编译 hadoop的eclipse插件,大概是0.2x以后的版本 已经不给提供hadoop的eclipse插件了,希望大神 给提供以下编译的方法,对我们这些新人来说是莫大的帮助!
一、linux配置
1. 创建hadoop组
Sudo addgroup hadoop
添加用户hadoop1到hadoop组
Sudo adduser --ingroup hadoop hadoop1
给hadoop1用户赋权限
sudo gedit /etc/sudoers
在root ALL=(ALL:ALL) ALL下添加
hadoop ALL=(ALL:ALL) ALL
2. 安装JDK环境
http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html 在以上 连接 下 载 linux 64 下的 jdk 的安装文件: jdk-6u32-linux-x64.bin
01 ,将下 载好的 jdk-6u32-linux-x64.bin 通 过 SSH 上 传到 /usr/java 下
scp -r ./jdk-6u32-linux-x64.bin root@hadoop1:/usr/java
02 , 进入 JDK 安装目 录 cd /usr/java 并且 执行 chmod +x jdk-6u32-linux-x64.bin
03 , 执行 ./jdk-6u32-linux-x64.bin
04 ,配置 环境变量,执行 cd /etc 命令后 执行 vi profile ,在行末尾添加
export JAVA_HOME=/usr/java/jdk1.6.0_32
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
05 , 执行 chmod +x profile 将其 变成可执行文件
06 , 执行 source profile 使其配置立即生效
source /etc/profile
07 , 执行 java -version 查看是否安装成功
3. 修改机器名
sudo gedit /etc/hostname
修改hosts
sudo gedit /etc/hosts
修改为 node1 node2 node3
4. 安装SSH
sudo apt-get install openssh-server
启动
~$ sudo /etc/init.d/ssh start
查看是否正确启动
ps -e | grep ssh
5. SSH 无密码登陆
首先将机器用户转变为hadoo,以防权限问题
su - hadoop
ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式
1.创建ssh-key
ssh-keygen -t rsa -P ""
(注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成 对出现的)
2. 进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是 没有authorized_keys文件的;
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
或者
~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
测试能否无密码登陆
Ssh localhost
3. 把hadoop02中的id_rsa.pub拷贝到hadoop01中
hadoop02@ubuntuserver2:~/.ssh$
scp id_rsa.pub hadoop01@192.168.1.135:/home/hadoop01
注意:hadoop01@192.168.1.135在ubuntu操作系统中必须这样写,否则就会出现 错误。这可能跟其他的linux操作系统不同,hadoop01是你的登录名,192.168.1.135 是IP地址。
这样就可以传递成功!
hadoop01@hadoop-master:~$ cat id_rsa.pub >> .ssh/authorized_keys
注意这个要在/hadoop01目录中,完成这部之后,hadoop02访问hadoop01就不需 要密码访问了。
测试一下:在hadoop02中,ssh hadoop01@192.168.1.135 测试一下是否直接可以控制hadoop01了!
6. 安装vmware-tools
Sudo tar xzvf /home/hadoop/vmtools.tar.gz
Sudo vmware-tools-distrib/vmware-install.pl
一路回车
7.为了方便配置,修改hosts 用域名代替IP
Sudo gedit /etc/hosts
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
二、安装hadoop2.0.4
1.解压
01. 假设hadoop--2.0.4.tar.gz在桌面,将它复制到安装目录 /usr/local/下;
1 | sudo cp hadoop--2.0.4.tar.gz /home/hadoop |
02. 解压hadoop-0.20.203.tar.gz;
1 2 | cd /usr/local sudo tar -zxf hadoop--2.0.4.tar.gz |
03. 将解压出的文件夹改名为hadoop;
1 | sudo mv hadoop-2.0.4 hadoop |
04. 将该hadoop文件夹的属主用户设为hadoop,
1 | sudo chown -R hadoop:hadoop hadoop |
2.配置环境变量
export HADOOP_DEV_HOME=/home/hadoop/hadoop
export PATH=$PATH:$HADOOP_DEV_HOME/bin
export PATH=$PATH:$HADOOP_DEV_HOME/sbin
export HADOOP_MAPARED_HOME=${HADOOP_DEV_HOME}
export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}
export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}
export YARN_HOME=${HADOOP_DEV_HOME}
export HADOOP_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
3.配置hadoop
创建并配置hadoop-env.sh
vim /home/hadoop/hadoop/etc/hadoop/hadoop-env.sh
在末尾添加 export JAVA_HOME=/usr/java/jdk1.6.30
core-site.xml
在 configuration 节点 里面添加属性
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://node1:9000</value>
</property>
添加 httpfs 的 选项
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>node1</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
slave配置
vim /home/hadoop/hadoop/etc/hadoop/slaves
添加 slave 的 IP
node2
Node3
配置hdfs-site.xml
vim /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml
添加 节点
<!-- fu ben shu -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/cloud/hdfs204/name</value>
<final>true</final>
</property>
<property>
<name>dfs.dataname.data.dir</name>
<value>file:///home/hadoop/cloud/hdfs204/data</value>
<final>true</final>
</property>
<!--备份-->
<property>
<name>dfs.federation.nameservice.id</name>
<value>ns11</value>
</property>
<property>
<name>dfs.namenode.backup.address.ns11</name>
<value>node1:50100</value>
</property>
<property>
<name>dfs.namenode.backup.http-address.ns11</name>
<value>node1:50105</value>
</property>
<!--namenode ns1-->
<property>
<name>dfs.federation.nameservices</name>
<value>ns1</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1</name>
<value>node1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1</name>
<value>node1:23001</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address.ns1</name>
<value>node1:23002</value>
</property>
配置yarn-site.xml
添加 节点
<!-- Site specific YARN configuration properties -->
<!--ResourceManager host:port for clients to submit jobs -->
<property>
<name>yarn.resourcemanager.address</name>
<value>node1:18040</value>
</property>
<!--ResourceManager host:port for ApplicationMasters to talk to Scheduler to obtain resources-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>node1:18030</value>
</property>
<!--ResourceManager web-ui host:port.-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>node1:18088</value>
</property>
<!--ResourceManager host:port for NodeManagers.-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>node1:18025</value>
</property>
<!--ResourceManager host:port for administrative commands.-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>node1:18141</value>
</property>
<!--Shuffle service that needs to be set for Map Reduce applications.-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce.shuffle</value>
</property>
移植
要将master机器上的文件一一复制到datanode机器上(node2,node3都要复制):(这里以son-1为例子)
1. 公钥的复制
scp ~/.ssh/id_rsa.pub hadoop@node2:~/.ssh/ |
2. hosts文件的复制
scp /etc/hosts hadoop@node2:/etc/hosts |
注:这里如果不能复制,就先将文件复制到/home/hadoop下面,即为:
/home/hadoophadoop@node2: scp /etc/hosts |
再在datanode机器上将其移到相同的路径下面/etc/hosts .
3. hadoop文件夹的复制,其中的配置也就一起复制过来了!
scp -r /home/hadoop/hadoop hadoop@node2:/home/hadoop |
如果不能移动的话和上面的方法一样!
并且要将所有节点的hadoophome/hadoop权限进行如下的修改:
sudo chown -R hadoop:hadoop hadoop |
这些东西都复制完了之后,datanode机器还要将复制过来的公钥追加到收信任列表:在每个子节点的自己种都要操作。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys |
还有很重要的一点,子节点datanode机器要把复制过来的hadoop里面的data1,data2和logs删除掉! 如果不删掉会面临有时启动datanode的时候,其它从节点的datanode先启动然后自动停止的问题
还有要修改其它的java的环境变量地址,
配置从节点的/home/hadoop/hadoop/etc/hadoop/hadoop-env.sh(找到#export JAVA_HOME=...,去掉#,然后加上本机jdk的路径);这个环境不一,自己配置一下。
这样环境已经基本搭建好了,现在开始测试一下。
格式化集群
hadoop namenode -format -clusterid clustername
启动hdfs执行
start-dfs.sh
开 启 hadoop dfs服 务
启动Yarn
开 启 yarn 资 源管理服 务
start-yarn.sh
启动httpfs
开 启 httpfs 服 务
httpfs.sh start
使得 对外 可以提高 http 的restful接口服 务
在hadoopnode1上,创建输入目录 :hadoop fs -mkdir hdfs://192.168.1.151:9000/input
将 /home/hadoop/hadoop-2.0.4-alpha/ 目 录下的所有 txt 文件复制到 hdfs 分布式文件系 统的目录里,执行以下命令
$hadoop fs -put /home/hadoop/hadoop-2.0.4-alpha/*.txt hdfs://192.168.1.151:9000/input
在 hadoopnode1 上, 执行 HADOOP 自 带的例子, wordcount 包,命令如下
$cd /home/hadoop/hadoop-2.0.4-alpha/share/hadoop/mapreduce
$yarn jar hadoop-mapreduce-examples-2.0.4-alpha.jar wordcount hdfs://192.168.1.151:9000/input hdfs://192.168.1.151:9000/output
在 hadoop1 上, 查看结果命令如下 :
$ hadoop fs -ls hdfs://192.168.1.151:9000/output
Found 2 items
-rw-r--r-- 2 hadoop supergroup 0 2013-05-01 19:34 hdfs://192.168.1.151:9000/output/_SUCCESS
-rw-r--r-- 2 hadoop supergroup 8739 2013-05-01 19:34 hdfs://192.168.1.151:9000/output/part-r-00000
$ hadoop fs -cat hdfs://192.168.1.151:9000/output/part-r-00000 即可看到每个 单词的数量
运行wordcount例子时注意命令: yarn jar hadoop-mapreduce-examples-2.0.4-alpha.jar wordcount /input /output ;此前版本是用: hadoop jar hadoop-mapreduce-examples-2.0.4-alpha.jar wordcount /input /output ,现在不能用了,如果用hadoop 命令 会报 内存溢出的问题,本人遇到这问题时查了好长时间资料也查不到问题,百思不得解,直到看了一些大神的 命令才恍然大悟, 请大家不要走弯路;
本文是根据网上好多大神的资料 然后 结合自己实际情况搭建出来的,感谢网上那些无私的开源大神!