基于python的hadoop(单机)环境搭建及使用

  • 0.写在前面
  • 1.虚拟机安装centos6.5
  • 1.1安装流程
  • 1.1.1系统安装
  • 1.1.2修改静态ip(超级用户)
  • 1.1.3更换可用源(超级用户)
  • 1.1.4安装配置telnet(超级用户)
  • 1.1.5关闭防火墙(超级用户)
  • 1.2参考网址
  • 2.在centos6.5中安装python
  • 2.1配置流程
  • 2.1.1安装python(超级用户)
  • 2.1.2需要安装的库(普通用户,有pip3装这些库会很简单)
  • 2.2参考网址
  • 3.在centos6.5中搭建hadoop(单机)并设置免密登录
  • 3.1配置流程
  • 3.1.1安装jdk(超级用户,大部分教程装在/usr目录上)
  • 3.1.2安装并配置hadoop(普通用户)
  • 3.1.3测试一下(普通用户)
  • 3.1.4设置免密登录(对应的用户)
  • 3.3参考网址
  • 4.使用hadoop
  • 4.1hadoop常用命令
  • 4.1.1 上传文件
  • 4.1.2 查看文件内容
  • 4.1.3 查看指定路径下的文件
  • 4.1.4 删除文件
  • 4.1.5下载文件
  • 4.1.6 创建目录或文件
  • 4.1.7 重命名文件
  • 4.1.8 终止作业
  • 4.3python中的mrjob库的运用
  • 4.2参考网址


0.写在前面

        多了解一些linux系统的基础。本记录贴基于Centos6.5版本,使用jdk1.7.0_71,python3.6.8,hadoop-2.5.2。文章内容为个人学习记录以及理解。如有错误,望斧正。

一、安装流程:
1.修改静态ip–>2.更换可用源–>3.安装python3(进入python3.6文件夹后先执行2.1的操作)–>4.安装pip3(本贴使用的是python3.6.8,相对较高版本不会出现需要更新ssh的情况)–>5.安装好相关库–>6.安装jdk

二、相关参考资源:
(1)Linux常用命令 (2)centos6.5 提取码:y0dz
(3)vm虚拟机 提取码:si64
(4)Python3.6.8 提取码:clhg
(5) jdk1.7_071 提取码:w5uj
(6)hadoop-2.5.2 提取码:nhn3

1.虚拟机安装centos6.5

1.1安装流程

安装虚拟机–>修改静态ip–>更换可用源

1.1.1系统安装

centos系统普通安装比较简单,略了。
查看当前系统的版本

cat /etc/redhat-release   #任意选一项即可
cat /etc/issue     #任意选一项即可

查看当前系统的内核

cat /proc/version			#任意选一项即可
uname -a					#任意选一项即可

无界面版安装参考参考网址

1.1.2修改静态ip(超级用户)

查看虚拟机的网络配置

hadoop mr任务python hadoop with python_hadoop mr任务python


再执行以下代码,根据以上参数修改ifcfg-eth0文档

vi /etc/sysconfig/network-scripts/ifcfg-eth0

我的配置如下

hadoop mr任务python hadoop with python_bash_02

在ifcfg-eth0文件中主要修改:
        1.是BOOTPROTO改为静态
        2.修改ONBOOT=“yes”,指明在系统启动时激活网卡,只有在激活状态的网卡才能去连接网络,进行网络通讯。
        3.设置正确的ip地址,前三个码段要和虚拟机的网关一致
        4.USERCTL=yes/no 是否允许非root用户控制该设备
        5.IPADDR:ip地址
        6.NETMASK:子网掩码(一般为255.255.255.0)
        7.GATEWAY:网关

执行

service network restart

重启网络后,打开浏览器测试一下是否联网成功。
查看ip地址是否修改成功(以下命令任意都可以查看ip地址)

ip addr 				#任意选一项即可
ifconfig					#任意选一项即可

其余配置信息,可用以下命令查看

route

1.1.3更换可用源(超级用户)

换源
        超级用户模式下依次执行以下命令即可(以下命令是修改为阿里源的命令)

sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo
yum clean all
yum makecache

        第一句命令我目前不知是什么含义
        第二句是备份原本的的CentOS-Base.repo文件
        第三句下载Centos-6-Vault-Aliyun.repo并以CentOS-Base.repo保存
        第四句清除原本的缓存包
        第五句保存下载新下载的缓存包

查看是否换源成功

cat /etc/yum.repos.d/CentOS-Base.repo

        和下面类似有aliyum基本上是成功的了

hadoop mr任务python hadoop with python_hadoop mr任务python_03


        注:如果在换源成功后依然不能使用的情况,可以尝试以下方式解决(我遇到的问题确实是这个,所以能解决)在超级用户下修改

vi /etc/yum.repos.d/epel.repo

        把所有https改为http,如下

hadoop mr任务python hadoop with python_bash_04

1.1.4安装配置telnet(超级用户)

安装前先查看telnet

rpm -qa | grep telnet

安装

yum install  xinetd
yum install telnet
yum install telnet-server

修改配置文件

vim  /etc/xinetd.d/telnet

用su权限把disable改为 no,如图

hadoop mr任务python hadoop with python_hadoop_05


然后保存退出即可

最后使配置生效

service  xinetd restart

关闭防火墙,然后在物理机上设置一下

借用一下这个博客的图

hadoop mr任务python hadoop with python_hadoop_06


然后就可以win+r唤出运行窗口并输入cmd打开命令行窗口

输入以下内容(虚拟机的ip地址)

telnet xxx.xxx.xxx.xxx

连接自己的虚拟机了

hadoop mr任务python hadoop with python_hadoop_07


接着输入自己虚拟机用户的账号密码,账号密码正确就会连接上了。

1.1.5关闭防火墙(超级用户)

查询防火墙状态

service iptables status

如下是防火墙开启状态

hadoop mr任务python hadoop with python_hadoop_08

如下是防火墙关闭状态

hadoop mr任务python hadoop with python_hadoop mr任务python_09


临时关闭防火墙

service iptables stop

永久关闭防火墙

chkconfig iptables off

1.2参考网址

(1)VMware中安装Centos6.5-64位-minimal镜像 (2)修改静态ip
(3)CentOS 6 2021 可用源
(4)CentOS 6和CentOS 7防火墙的关闭 (5)centos6.5上安装配置telnet服务

2.在centos6.5中安装python

2.1配置流程

安装python3–>安装相关库

2.1.1安装python(超级用户)

        先安装一下系统依赖。(缺少依赖会导致hadoop无法运行,必须所有都装上,反正安装过的不会再安装

yum install -y zlib-devel bzip2-devel \
openssl-devel ncurses-devel sqlite-devel \
readline-devel tk-devel gcc make

        下载python3.6.8。下载太早的版本会遇到ssh版本太低的问题,比较难处理,所以我们这里下载3.6.8版本,博主亲测不会出现ssh过低问题。
可以先打开自己想要安装的位置,再执行以下操作。

wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz

        解压
压缩包解压到当前路径下

tar -zxvf Python-3.6.8.tgz

        安装
先打开Python-3.6.8文件夹

cd Python-3.6.8
./configure --prefix=/usr/local/python3
make && make install

        建立软连接

ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3.6
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

最后升级一下pip3

pip3 install --upgrade pip

2.1.2需要安装的库(普通用户,有pip3装这些库会很简单)

安装好相关的python库,为后面使用hadoop准备。
(1)numpy

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

(2)matplotlib

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib

(3)mrjob

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple mrjob

2.2参考网址

(1)Centos6 安装python3 pip3 ipython3 (2)如何修改CentOS 6.x上默认Python版本
(3)centos怎么卸载python (3)Centos6.5 编译安装python3.5版本,无法使用退格键方向键删除键等 (4)解决pip3 install下载很慢的问题(直接指定路径) (5)pip3下载速度慢的解决办法(永久修改)

3.在centos6.5中搭建hadoop(单机)并设置免密登录

3.1配置流程

安装jdk–>安装并配置hadoop–>设置免密登录

3.1.1安装jdk(超级用户,大部分教程装在/usr目录上)

        下载jdk
        下载到文件后先把文件从主机传到虚拟机,解压到当前压缩包位置可以忽略-C及后面内容

tar zxvf /文件所在路径/下载到的压缩包名称  /解压文件存放路径

        关于解压问题见参考网址 关于对应文件配置环境变量的作用

/etc/profile
#此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件
中搜集shell的设置.
/etc/bashrc
#为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile
#每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设
置一些环境变量,执行用户的.bashrc文件.
~/.bashrc
#该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.
~/.bash_logout
#当每次退出系统(退出bash shell)时,执行该文件.

        配置环境变量

vim /home/hadoop/.bash_profile

        追加如下内容(本贴的java是为hadoop装的,只需要javahome)

#JAVA
export JAVA_HOME=/usr/java/jdk1.8.0_131 #注意替换版本号
export PATH=$JAVA_HOME/bin:$PATH

        然后使配置生效即可

source /home/hadoop/.bash_profile

        按照参考网址3.3(1)的安装流程,即可完成安装
        注意:修改/home/hadoop/.bash_profile时应当根据自己安装路径进行配置

3.1.2安装并配置hadoop(普通用户)

        安装hadoop,把下载到的包解压到指定路径之后(建议放在普通用户的根目录下)
解压
        解压到当前压缩包位置可以忽略-C及后面内容

tar zxvf /文件所在路径/下载到的压缩包名称  -C  /解压文件存放路径

参数配置

        编辑配置文件1
        写上自己对应的java路径

vim /home/hadoop/hadoop-*/etc/hadoop/hadoop-env.sh

hadoop mr任务python hadoop with python_bash_10

        编辑配置文件2

vim /home/hadoop/hadoop-*/etc/hadoop/yarn-env.sh

        写上自己对应的java路径

hadoop mr任务python hadoop with python_bash_11


        编辑配置文件3

vim /home/hadoop/hadoop-*/etc/hadoop/core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
    <name>fs.default.name</name>
    <!-- 这里填的是你自己的ip,端口默认,hdfs工作模式-->
    <value>hdfs://192.168.1.109:9000</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <!-- 这里填的是你自定义的hadoop工作的目录,端口默认-->
    <value>/usr/local/hadoop/tmp</value>
</property>
</configuration>

        编辑配置文件4

vim /home/hadoop/hadoop-*/etc/hadoop/hdfs-site.xml
<configuration>
<!-- 备份namenode节点访问位置 -->
<property>
       <name>dfs.namenode.secondary.http-address</name>
       <value>192.168.1.109:50090</value>
</property>
<!-- 主namenode节点访问位置 -->
<property>
       <name>dfs.namenode.http-address</name>
       <value>192.168.1.109:50070</value>
</property>
	<!-- 这个参数设置为1,因为是单机版hadoop -->
<property>
        <name>dfs.replication</name>
        <value>1</value>
</property>
 <!-- 设置hdfs的文件权限 -->
<property>
    <name>dfs.permissions</name>
    <value>false</value>
 </property>
 <!-- 指定namenode元数据存储位置 -->
<property>
       <name>dfs.namenode.name.dir</name>
       <value>file:/usr/local/hadoop/data/namenode</value>
</property>
 <!-- 指定namenode日志文件存储位置 -->
<property>
       <name>dfs.namenode.edits.dir</name>
       <value>file:/usr/local/hadoop/data/edits</value>
</property>
 <!-- 指定datanode数据存储位置 -->
<property>
       <name>dfs.datanode.data.dir</name>
       <value>file:/usr/local/hadoop/data/datanode</value>
</property>
 <!-- 设置datanode切片大小 128M-->
<property>
        <name>dfs.blocksize</name>
        <value>134217728</value>
</property>
</configuration>

        编辑配置文件5

vim /home/hadoop/hadoop-*/etc/hadoop/mapred-site.xml
<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>     
      <name>mapred.job.tracker</name>    
      <value>192.168.1.109:9001</value>     
</property> 
<!-- 开启历史任务  -->
<property>     
      <name>mapreduce.jobhistory.address</name>    
      <value>192.168.1.109:9002</value>     
</property> 
<!-- 开启历史任务访问端口  -->
<property>     
      <name>mapreduce.jobhistory.webapp.address</name>    
      <value>192.168.1.109:9003</value>     
</property> 
<!-- 开启mapreduce小任务模式  -->
<property>     
      <name>mapreduce.job.ubertask.enable</name>    
      <value>ture</value>     
</property> 
</configuration>

        编辑配置文件6

vim /home/hadoop/hadoop-*/etc/hadoop/yarn-site.xml
<configuration>

<!-- Site specific YARN configuration properties -->
<!--配置yarn主节点位置,默认端口8088 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>192.168.1.109</value>
</property>
<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>
</configuration>

配置环境变量

vim ~/.bash_profile

        追加以下内容

#HADOOP
export HADOOP_HOME=/home/hadoop/hadoop-2.5.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

        保存并推出文件后使用,使配置生效

source ~/.bash_profile

        在完成安装后可能会出现需要反复配置的问题。可以执行以下命令
注意:此处应该以超级用户下执行
        编辑~/.bashrc

vim ~/.bashrc

        在行末添加

source /home/hadoop/.bash_profile

        然后

source ~/.bashrc

3.1.3测试一下(普通用户)

        找到自己版本的hadoop的样例jar包的位置。
        一般是在hadoop-2.5.2/share/hadoop/mapreduce/里,里面会有有个example包格式类似下面。
        计算圆周率pi

hadoop jar /home/hadoop/hadoop-2.5.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar pi 10 10

如果后续有什么问题也也不应该是前面的配置问题
        ps:一个题外话,我在装好python,jdk,hadoop之后,跑jar包没有问题。用python运行自己写的代码失败,最后发现是python依赖未装完整,如果发现问题可以尝试把我前面说的依赖都装一遍,然后删除再编译一次python。

3.1.4设置免密登录(对应的用户)

        需要使用两台机器ssh可以互相免密登录

1.master生成 ssh公钥;
2.复制本机公钥到远程服务器.ssh/authorized_keys中,authorized_keys文件不存在则创建;
3.slave1生成公钥,把公钥追加到master的远程服务器.ssh/authorized_keys中;
4.把master的远程服务器.ssh/authorized_keys发送到slave1;
5.设置authorized_keys权限,.ssh和authorized_keys都应只有用户自己有写权限
6.结束。
        需要使用机器ssh可以免密登录
1.生成 ssh公钥;
2.复制本机公钥到远程服务器.ssh/authorized_keys中,authorized_keys文件不存在则创建;
3.设置authorized_keys权限,.ssh和authorized_keys都应只有用户自己有写权限
4.结束。

具体操作
        网上教程各种各样的说法,实际上只是密钥写错地方了。
        超级用户免密

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa #生成密钥,-t 指定dsa加密方式,-P ''为不提供密码,-f 指定文件路径
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys    #追加密钥内容到authorized_keys
chmod 600 ~/.ssh/authorized_keys     #设置authorized_keys权限

        普通用户免密

ssh-keygen -t dsa -P '' -f /home/hadoop/.ssh/id_dsa #生成密钥,-t 指定dsa加密方式,-P ''为不提供密码,-f 指定文件路径
cat /home/hadoop/.ssh/id_dsa.pub >> /home/hadoop/.ssh/authorized_keys			#追加密钥内容到authorized_keys
chmod 600 ~/.ssh/authorized_keys      #设置authorized_keys权限

3.3参考网址

(1)Linux Centos安装JDK1.8教程 (2)CentOS6.5下搭建Hadoop环境详细步骤
(3)Hadoop的jobhistoryserver配置
(4)hadoop进行免密登录详解
(5)Hadoop伪分布模式下启动需要密码登录,求解决SSH免密码登录
(6)Hadoop用户配置免密登陆
(7)mr-jobhistory-daemon.sh 启动和关闭脚本
(8)Linux解决每次进入命令要重新 source /etc/profile 的问题
(9)centos 6.5 解压 tar
(10)hadoop slaves文件_Hadoop 系列(四)—— Hadoop单机伪集群环境搭建
(11)搭建Hadoop+Python的大数据开发环境
(12)Hadoop2.5.2伪分布安装

4.使用hadoop

4.1hadoop常用命令

4.1.1 上传文件

hadoop dfs –put [文件目录]
hdfs dfs -put [文件目录]

4.1.2 查看文件内容

hadoop dfs –ls [文件目录]
hdfs dfs -ls [文件目录]

4.1.3 查看指定路径下的文件

hadoop dfs -cat [文件目录]
hdfs dfs -cat [文件目录]

4.1.4 删除文件

hadoop fs -rm -r -f [文件目录]
hdfs dfs -rm -r -f [文件目录]

4.1.5下载文件

hadoop fs -get [文件目录] [本地目录]
hdfs dfs -get [文件目录] [本地目录]

4.1.6 创建目录或文件

hadoop fs -mkdir [文件目录] 
hdfs dfs -mkdir [文件目录]

4.1.7 重命名文件

hadoop fs -mv [文件目录] [本地目录]
hdfs dfs -mv [文件目录] [本地目录]

4.1.8 终止作业

hadoop job –kill [job-id]

4.3python中的mrjob库的运用

4.2参考网址

(1)Hadoop上传文件到hdfs中 (2)【hdfs 常用命令】数据put到hdfs
(3)解决 Unable to load native-hadoop library for your platform (4)MRJob 十分钟入门: 用 Python 轻松运行 MapReduce (5)Hadoop之MRjob入门
(6)Hadoop常用命令汇总