关于python使用hadoop(使用p

2023-01-31 05:01:49 python hadoop

最近想学习一下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

                      我的环境变量如下:  

    

                       然后再来执行一次:

                        

                      成功!

相关文章