热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据开发利器:Hadoop(2)

大数据开发利器:Hadoop(2)1.准备工作本文软件配置:-VW12.5-CentOSrelease6.864位lsb_release-a-JDK1.7.0

大数据开发利器:Hadoop(2)

1. 准备工作

本文软件配置:
- VW12.5
- CentOS release 6.8 64位 lsb_release -a
- JDK 1.7.0_25 64位 java -version
- Hadoop 2.7.3 hadoop version

1.1 使用VW安装CentOS

这步骤网络教程较多,不在过多讲解。注意以下几点:

  • 如果内存小于或等于4G,推荐双系统安装,内存大于4G,可使用虚拟机安装。
  • 虚拟机设置过程中注意内存分配、客户机操作系统选择(本文选择CentOS64位)
  • 安装过程中注意Root密码设置、硬盘分区、软件安装等。初次安装建议设置用户名为hadoop,下面就不用再添加hadoop用户了。

顺便吐槽一下,CentOS 6.8默中文字体非常丑,建议安装完成之后选择系统->首选项(Preferences)->外观(Appearance)修改一下。

1.2 修改主机名和用户名

为了统一开发环境,这里需要修改主机名和用户名。
① 添加用户

sudo useradd -m hadoop -s /bin/bash # 添加以hadoop为用户名的用户
sudo passwd hadoop # 设置密码

这里需要输入root密码。
② 修改当前主机名

 hostname # 查看当前主机名
vim /etc/syconfig/network # 使用Vim修改配置文件,但也可以使用类似windows的记事本gedit,操作简单一些
hostname hadoop

第二步中修改HOSTNAME=hadoop
设置完成之后,注销当前用户,使用刚刚创建的hadoop用户登录。

1.3 配置网卡

① 进行配置

sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0

修改如下:

DEVICE=eth0 # 默认,物理设备名
HWADDR=00:0C:29:23:83:95 # 默认,MAC地址
TYPE=Ethernet # 默认
UUID=xxxxx # 默认,全局统一标识符
OnBOOT=yes # 修改,[yes|no] 引导时是否激活网卡
NM_COnTROLLED=yes # 默认
BOOTPROTO=dhcp # 默认,[none|static|bootp|dhcp] (引导时不适用协议|静态分配|Bootp协议|DHCP协议)

设置BOOTPROTO参数为dhcp是由于虚拟机采用NAT方式。
修改完成之后,重启网络服务,并测试是否能上网。
② 测试连接

service network restart
ping www.baidu.com

③ 修改hosts

vim /etc/hosts

在下面增加一行: ip地址 主机名
ip地址使用命令 ifconfig查看
例如:127.0.0.1 hadoop

1.4 配置SSH无密码连接

Hadoop并不是通过SSH协议进行数据传输,Hadoop仅仅时在启动和停止的时候需要主节点通过SSH协议将从节点上面的进程启动或停止。即不配置SSH对Hadoop的使用没有任何影响,只需要在启动和停止Hadoop的时候输入每个从节点的用户名的密码就行了,但是一旦集群的规模增大,这种方式不可取同时也不利于学习和调试。
① 在配置SSH无密码连接之前,先关闭防火墙。

service iptables stop 
chkconfig iptables off #永久关闭防火墙
vim /etc/selinux/config

设置SELINUX=disabled (原来为enforcing
此步存疑,我使用该版本时未关闭但仍可完成安装并启动。不过大部分教程均提到,所以设置一下也无妨。
② 检查SSH是否安装
CentOS一般附带了SSH,所以首先检查一下是否安装。

sudo service sshd restart
rpm -qa | grep openssh
rpm -qa | grep rsync

如果已经安装好SSH和rsync(一个远程数据同步工具,可通过LAN/WAN快速同步多台主机的文件),将会如下图所示。
openssh

rsync
当然,如果没有安装,使用如下命令进行安装。

sudo yum install openssh-clients
sudo yum install openssh-server

安装完成之后使用上面的方法进行验证。
④ 测试ssh是否可用

ssh localhost

测试ssh连接
首次登录,输入yes 和用户密码。
这样每次都需要输入密码,所以配置相应的SSH无密码登录更方便一些。

exit   # 退出刚才的ssh localhost
cd ~/.ssh/ #ssh localhost之后会自动生成
ssh-keygen -t rsa
cat id_rsa.pub >> authorized_keys #加入授权
chmod 600 ./authorized_keys

如下图所示:
ssh无密码连接
此时,再次输入ssh localhost命令,无需输入密码即可直接登录。如下图:
ssh连接测试2

1.5 JAVA环境安装

CentOS一般预装了OpenJDK,这里我使用Oracle JDK
① 卸载OpenJDK

rpm -qa | grep jdk  # 查看是否安装OpenJDK
sudo yum -y remove xxx # 这里的xxx是上一个命令返回的结果

② 安装OracleJDK

  • 下载JDK包
    这里在JAVA官网上下载tar包。目前可以下载1.8版本,本文使用1.7版本。

  • 解压JDK包
    将tar包放置在/usr/local/目录下,并进行解压。(Linux 目录规则)

sudo tar -xvzf jdk-7u25-linux-x64.tar.gz # 解压
rm -f jdk-linux-* #删除压缩包
  • 配置环境变量
vim ~/.bashrc

.bashrc只对单个用户生效,当登录以及每次打开新的shell时,该文件被读取。衍生阅读:设置Linux环境变量的区别

export JAVA_HOME=/usr/local/jdk1.7.0_25
export PATH=$PATH:$JAVA_HOME/bin

修改环境变量后,执行命令。让环境变量立即生效。

source ~/.bashrc
  • 检查一下是否配置成功
java -version

若如下图所示,则说明该配置成功。
JAVA版本

2 伪分布式安装Hadoop 2.0

2.1 安装和配置

① 下载Hadoop2.0
在Hadoop官网上下载Hadoop binary版本。下载某个版本时有两种类型:sourcebinary。Source是源代码,而binary是编译好的。
下载时建议也下载hadoop-2.x.y.tar.gz.mds这个文件,用于检查hadoop-2.x.y.tar.gz的完整性。

cat hadoop-2.7.3.tar.gz.mds | grep 'MD5'
md5sum hadoop-2.7.3.tar.gz | tr "a-z" "A-Z" # 计算机MD5值,并转化为大写,方便比较。

查看输出的两个值,如果存在差异,重新下载。如下图:
比较MD5码值
② 解压tar包
将hadoop安装在/usr/local目录下。

tar sudo tar -xvzf hadoop-2.7.3.tar.gz
# 这里可以改名或者做一个软连接,任选一种或不选
sudo mv hadoop-2.7.3 ./hadoop #方式1:改名
ln -s hadoop-2.7.3 hadoop # 方式2:软连接
sudo chown -R hadoop:hadoop hadoop #更改权限

③ 设置环境变量

vim ~/.bashrc
export HADOOP_HOME=/usr/local/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
source ~/.bashrc # 使配置立即生效

④ 配置Hadoop配置文件
- hadoop-env.sh
这个文件配置hadoop的环境,比如namenode的大小等,由于属于初学阶段,暂时不必修改。
- core-site.xml

<configuration>
<property>
<name>hadoop.tmp.dirname>
<value>file:/usr/local/hadoop-2.7.3/tmpvalue>
property>
<property>
<name>fs.defaultFSname>
<value>hdfs://localhost:9000value>
property>
configuration>

hadoop.tmp.dir临时文件目录。
fs.defaultFS网页访问端口号
- hdfs-site.xml

<configuration>
<property>
<name>dfs.replicationname>
<value>1value>
property>
<property>
<name>dfs.namenode.name.dirname>
<value>file:/usr/local/hadoop-2.7.3/tmp/dfs/namevalue>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:/usr/local/hadoop-2.7.3/tmp/dfs/datavalue>
property>
<property>
<name>dfs.webhdfs.enabledname>
<value>truevalue>
property>
configuration>

dfs.replication设置HDFS文件副本数。
dfs.namenode.data.dir设置NameNode的元数据存放的本地文件路径。
dfs.datanode.data.dir设置DameNode的元数据存放的本地文件路径。
如果需要使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令,就需要设置dfs.webhdfs.enabledtrue,因为这些信息都是由namenode来保存的。
- mapreduce.xml

<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>hadoop:19888value>
property>
configuration>

mapreduce.jobhistory.address配置jobhistory Server地址。
mapredcue.jobhistory.webapp.address配置jobhistory server web UI地址。
- yarn-site.xml

 <configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>resourcemanager.addressname>
<value>hadoop:8032value>
property>
<property>
<name>yarn.resourcemanager.scheduler.addressname>
<value>hadoop:8030value>
property>
<property>
<name>yarn.resourcemanager.resource-tracker.addressname>
<value>hadoop:8031value>
property>
<property>
<name>resourcemanager.admin.addressname>
<value>hadoop:8033value>
property>
<property>
<name>resourcemanager.webapp.adressname>
<value>hadoop:8088value>
property>
<property>
<name>yarn.log-aggregation-enablename>
<value>truevalue>
property>
configuration>

yarn.nodemanager.aux-servicesNodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序
resourcemanager.addressResourceManager 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等。
yarn.resourcemanager.scheduler.addressResourceManagerApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。
yarn.resourcemanager.resource-tracker.addressResourceManagerNodeManager暴露的地址.。ResourceManager 对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等。通过该地址向RM汇报心跳,领取任务等。
resourcemanager.admin.addressResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。
resourcemanager.webapp.adressResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。
yarn.log-aggregation-enable如果配置错误,会显示 Aggregation is not enabled. Try the nodemanager at IP:HOST
- slaves

# 默认为一个节点
localhost

⑤ 配置完成之后,执行NameNode初始化

hadoop namenode format

成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。如下图:
NameNode初始化完成

2.2 启动和测试hadoop

① 启动Hadoop

start-all.sh
jps #判断是否启动成功

进程显示
其中,若成功启动会列出如下进程:NameNode、DataNode、SencondarNameNode(以上HDFS进程)、ResourceManager、NodeManager(以上两项为YARN进程)。
若SencondarNameNode未启动,使用stop-dfs.sh关闭进程,然后尝试再次启动。如果没有NameNode或DataNode,则配置不成功,检查之前步骤,或通过启动日志排查原因。(查看logs目录下的log文件)
可能原因之一是多次format,将share/dfs目录下文件删除,重醒format。

stop-all.sh #关闭命令 

② 访问Web页面
可以访问http://localhost:50070查看NameNode和DataNode信息。
HDFSWeb页面
访问http://localhost:8088查看任务的运行情况(需要启动YARN)。
任务运行情况
以下命令启动历史服务器,可以在web下查看任务运行。

mr-jobhistory-daemon.sh start historyserver # 启动jobhistory
yarn-damon.sh start historyserver #启动ApplicationHistoryServer

访问http://localhost:19888查看jobhistory的运行情况。

2.3 运行Hadoop伪分布式实例

以一个MapReduce作业来实现单词计数的功能。
① 首先,创建相应的文本文件

# start-all.sh 
cd ~
touch words
echo "data mining on data warehouse" >> words # 写入相同的两行语句
cat words

创建文本文件
那么可以直观的发现,单词统计的结果为:

单词 词频
data 4
mining 2
on 2
warehouse 2

② 将文件上传到HDFS的指定目录下

hadoop fs -mkdir /input #在HDFS根目录下创建/input文件夹
hadoop fs -ls / #查看目录是否创建
hadoop dfs -put words /input #将文本文件上传到该目录下。

如下图:
HDFS操作
③ 运行MapReduce程序,并查看结果

cd /usr/local/hadoop-2.7.3
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input /output
hdfs dfs -cat /output/part* # 查看结果

结果
可以发现结果与预期相同。
④ 其他一些命令

hdfs dfs -get /output/part* output# 将结果取回本地,并命名为output
hdfs dfs -rm -r /output # Hadoop 运行程序时,输出目录不能存在,因此若要重新运行程序,需要删除结果目录

可访问http://localhost:8088查看任务运行情况,如下图:
任务运行情况
⑤ 备注

start-dfs.sh #仅启动NameNode和DataNode
start-yarn.sh # 启动Yarn

启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用 YARN 时,是 “mapred.LocalJobRunner” 在跑任务,启用 YARN 之后,是 “mapred.YARNRunner” 在跑任务。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况。
如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成 mapred-site.xml.template,需要用时改回来就行。否则在该配置文件存在,而未开启 YARN 的情况下,运行程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的错误,这也是为何该配置文件初始文件名为 mapred-site.xml.template。

3. 总结

本节主要介绍了如何在CentOS上安装Hadoop2.0。基本完成了操作,但由于使用NAT模式和代理,虚拟机中配置静态IP方式不成功(无法ping通外网)。所以后续操作中直接访问http://IP地址:端口号的方式不成功。原因未知。

参考资料:

  1. 范东来-Hadoop海量数据处理-技术详解与项目实战。
  2. 林子雨-大数据技术原理与应用
  3. 网易云课堂

推荐阅读
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 本文介绍了在Android Studio中使用命令行build gradle的方法,并解决了一些常见问题,包括手动配置gradle环境变量和解决External Native Build Issues的方法。同时提供了相关参考文章链接。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
author-avatar
书友32976730
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有