最近想学习一下hadoop,但是本人对java不是很熟悉,所以决定用python来进行尝试,以下是整个环境部署及测试:
软件环境:VMware10.0,VMware10,ubuntu15.10桌面版(ubuntukylin-15.10-desktop-i386.iso),Apache hadoop(hadoop-1.2.1.tar.gz),JDK(jdk-8u11-linux-i586.tar.gz)
一 安装JDK(安装ubuntu对应的JDK,我这里是32位的ubuntu系统)
查看Linux多少位 命令file /bin/ls
创建文件夹 /usr/local/java
解压jdk,配置环境变量 vi /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_11
export JAVA_BIN=/usr/local/java/jdk1.8.0_11/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
使用 .(空格)/etc/profile使环境变量生效
检测安装 java -version 出现
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) Client VM (build 25.11-b03, mixed mode)
代表成功
二 安装ssh(hadoop主从指间通过ssh来连接)
apt-get install openssh-server
apt-get update #更新系统
apt-get upgrade #更新软件包
生成key:ssh-keygen -t rsa,一路回车,key在/root/.ssh 中
将key追加到authorized_keys授权文件,实现无密码登录本机 cat id_rsa.pub>>authorized_keys
检测是否成功 ssh localhost
三 修改机器名称
修改机器名称 vi /etc/hostname,改为Hadoop-namenode,重启后生效
四 配置固定IP,多台虚拟机
将虚拟机网络设置成NAT模式,然后将本机的本地连接共享给VMnet8,然后在虚拟机中创建一块网卡,手动添加IP地址192.168.137.11,子网255.255.255.0,网关和
DNS都为192.168.137.1
此时本机ip就固定为192.168.137.11
此时可以添加host了,vi /etc/hosts
127.0.0.1 localhost
192.168.137.11 Hadoop-namenode
192.168.137.12 Hadoop-datenode1
192.168.137.13 Hadoop-datenode2
克隆出2台datenod(如果是多台机器的集群,此步骤在配置好hadoop后进行最好)
一台修改机器名称 Hadoop-datenode1,修改ip为192.168.137.12
一台修改机器名称 Hadoop-datenode2,修改ip为192.168.137.13
五 安装hadoop
下载hadoop-1.2.1.tar.gz,解压到 /usr/local/hadoop中
修改配置文件 /usr/local/hadoop/hadoop-1.2.1/conf/hadoop-env.sh export JAVA_HOME=/usr/local/java/jdk1.8.0_11 指向jdk所在目录
export HADOOP_HOME_WARN_SUPPRESS=1
用于解决一个警告,具体什么警告忘记了
环境变量vi /etc/profile:
export HADOOP_HOME=/usr/local/hadoop/hadoop-1.2.1
export PATH=$HADOOP_HOME/bin:$PATH
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/lib:${HADOOP_HOME}/bin:${HADOOP_HOME}
export HADOOP_CLASSPATH=$CLASSPATH
使用 .(空格)/etc/profile使环境变量生效
单机版Hadoop(自己是主也是从)配置:
设置hadoop的HDFS的地址及端口号 core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
修改hadoop的hdfs配置,这里是改备份方式hdfs-site.xml这里设置1个备份:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
修改hadoop中MapReduce的配置,设置JobTracker的地址及端口mapred-site.xml:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://localhost:9001</value>
</property>
</configuration>
启动hadoop之前先格式化hadoop的HDFS进入/usr/local/hadoop/hadoop-1.2.1/bin: ./hadoop namenode -format
启动hadoop:./start-all.sh
测试:浏览器打开 localhost:50030(MapReduce的页面)
localhost:50070(HDFS的页面)
三台机器的小集群配置
1.三台机器拥有相同的用户
2.要求Hadoop-namenode能免密码ssh登录2台Hadoop-datenode(Hadoop-datenode1,Hadoop-datenode2)
设置hadoop的HDFS的地址及端口号 core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://Hadoop-namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/cjy/hadoop_tmp</value> #这里这么配置主要是为了不用每次重启机器就格式化一次hdfs
</property>
</configuration>
修改hadoop的hdfs配置,这里是改备份方式hdfs-site.xml这里设置2个备份:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
修改hadoop中MapReduce的配置,设置JobTracker的地址及端口mapred-site.xml:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://Hadoop-namenode:9001</value>
</property>
</configuration>
主masters:
Hadoop-namenode
从slaves:
Hadoop-datenode1
Hadoop-datenode2
启动hadoop之前先格式化hadoop的HDFS进入/usr/local/hadoop/hadoop-1.2.1/bin: ./hadoop namenode -format
启动hadoop:./start-all.sh
测试:浏览器打开 Hadoop-namenode:50030(MapReduce的页面)
Hadoop-namenode:50070(HDFS的页面)
六 测试hadoop是否能正常工作
hadoop fs -lsr /
查看HDFS的文件结构
hadoop fs -mkdir /tmp/test
在HDFS上新建文件夹
hadoop fs -put
/home/cjy/VMwareTools-9.6.1-1378637.tar.gz /tmp/test
把本地文件传到HDFS的/tmp/test目录下
hadoop fs -get /tmp/test/VMwareTools-9.6.1-1378637.tar.gz /home/
把HDFS文件拉到本地
hadoop fs -ls /tmp
列出HDFS的某目录
hadoop fs -cat /tmp/test/VMwareTools-9.6.1-1378637.tar.gz 查看HDFS上的文件
hadoop fs -rm /tmp/test/VMwareTools-9.6.1-1378637.tar.gz 删除HDFS上的文件
hadoop fs -rmr /tmp/test
删除HDFS上的目录
hadoop dfsadmin -report
查看HDFS状态,比如有哪些datanode,每个datanode的情况
hadoop dfsadmin -safemode leave
离开安全模式
hadoop dfsadmin -safemode enter
进入安全模式
关于python:
这里比较吐血,折腾了好久,看网上攻略都是相当简单,直接成功!!!!
反正不外乎几种方式 pyhdfs,pydoop等等,看网上的一路坎坎坷坷的,最后几乎要用hadoop shell去完成了。
最后在坚持了一下成功了:
这里说一个成功的例子 pyhdfs的:
下载地址在这里,https://pypi.python.org/pypi/python-hdfs/0.4
安装流程如下:
apt-get install python-dev
apt-get install libhdf4-dev
下载 svn co http://libpyhdfs.googlecode.com/svn/trunk/ libpyhdfs并解压
进入libpyhdfs,cp /usr/local/hadoop/hadoop-1.2.1/c++/Linux-i386-32/lib/libhdfs.so lib/
vi setup.py 修改以下内容:
include_dirs = ['/usr/lib/jvm/java-6-sun/include/'] -> include_dirs = ['/usr/local/java/jdk1.8.0_11/include']
runtime_library_dirs = ['/usr/local/lib/pyhdfs', '/usr/lib/jvm/java-6-sun/jre/lib/i386/server'] -> runtime_library_dirs = ['/usr/local/lib/pyhdfs',
'/usr/local/java/jdk1.8.0_11/jre/lib/i386/server']
修改/usr/local/java/jdk1.8.0_11/include/jni.h :
#include "jni_md.h" -> #include "linux/jni_md.h"
这时候安装pyhdfs:python setup.py install
安装成功,进去看看,然后会报一下错误:
解决方法 编辑vi /etc/ld.so.conf:加入一行 include /usr/local/hadoop/hadoop-1.2.1/c++/Linux-i386-32/lib
执行/sbin/ldconfig -v
这时候在进去看看貌似离成功不远了,但是:
又出错了,这里的问题是缺失了jar包,我们来添加环境变量,我对java不是很熟悉,所以就随便加加好了
添加环境变量 vi /etc/profile:
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/hadoop-client-1.2.1.jar
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/hadoop-core-1.2.1.jar
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/hadoop-ant-1.2.1.jar
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/hadoop-examples-1.2.1.jar
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/hadoop-minicluster-1.2.1.jar
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/hadoop-test-1.2.1.jar
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/hadoop-tools-1.2.1.jar
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/lib/commons-logging-1.1.1.jar
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/lib/commons-logging-api-1.0.4.jar
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/lib/commons-configuration-1.6.jar
export CLASSPATH=$CLASSPATH:${HADOOP_HOME}/lib/commons-lang-2.4.jar
同样执行.(空格)/etc/profile
我的环境变量如下:
然后再来执行一次:
成功!