【腾讯云的1001种玩法】hadoop 伪分布式搭建

hadoop 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。云计算大数据到现在是越来越火,而hadoop成为大数据不可或缺的分布式大数据计算平台。

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

今天就先教大家如何搭建伪分布式系统。

首先我们准备一台云服务器 内存 1G 操作系统 centos 7 IP地址是211.159.153.214:22

软件有hadoop-2.7.1.tar.gz和jdk-7u67-linux-x64.tar.gz。

下载地址:https://share.weiyun.com/51a2b349ba1587d69664ad50b7cded3c

首先我们用XSell链接(当然大家也可以用别的软件来连接)。

登录后我们就开始搭建我们的hadoop伪分布式系统。

修改主机名与IP地址的对应关系

[root@VM_11_203_centos ~]# hostname

查看主机名

[root@VM_11_203_centos ~]# vim /etc/hosts

修改文件为一下内容:

然后输入reboot重启机器。

配置ssh免密码登录

[root@VM_11_203_centos ~]# ssh 211.159.153.214
The authenticity of host '211.159.153.214 (211.159.153.214)' can't be established.
ECDSA key fingerprint is 22:49:b2:5c:7c:8f:73:56:89:29:8a:bd:56:49:74:66.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '211.159.153.214' (ECDSA) to the list of known hosts.
root@211.159.153.214's password:

这里我们要输入密码特别的不方便,所以要取消。

输入ssh-keygen -t rsa然后四个回车

[root@VM_11_203_centos ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
e4:7d:24:39:20:e1:27:07:3b:4c:8d:b0:3d:f6:4f:13 root@VM_11_203_centos
The key's randomart image is:
+--[ RSA 2048]----+
|    ..=+.        |
|     *.+.. .     |
|    . X + E .    |
|     . X . =     |
|        S + .    |
|         o o     |
|          .      |
|                 |
|                 |
+-----------------+

然后复制密钥到本机

[root@VM_11_203_centos ~]# ssh-copy-id 211.159.153.214
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@211.159.153.214's password:
[root@VM_11_203_centos ~]# ssh 211.159.153.214
Last login: Thu Mar 16 17:26:00 2017 from 218.21.34.74

因为hadoop是java写的,所以在这里要配置JAVA的环境变量,先创建几个目录,用来存放后面的文件。

[root@VM_11_203_centos ~]# cd /home
[root@VM_11_203_centos home]# ls
[root@VM_11_203_centos home]# mkdir softwares
[root@VM_11_203_centos home]# mkdir tools
[root@VM_11_203_centos home]# mkdir datas
[root@VM_11_203_centos home]# cd tools/

看一下系统是否安装了java

[root@VM_11_203_centos tools]# rpm -qa|grep jdk
[root@VM_11_203_centos tools]# rpm -qa|grep java

输入这两句啥都没有说明系统没有安装jdk,开始安装jdk,通过yum来安装一个文件上传插件。

[root@VM_11_203_centos tools]# yum install lrzsz –y

最后出现Complete!,说明安装成功。 然后上传JDK

[root@VM_11_203_centos tools]#rz

如果上传过慢,也可以用Xsell自带的文件上传功能上传文件,将我们的hadoop-2.7.1.tar.gz和jdk-7u67-linux-x64.tar.gz一起上传上去到我们新建的tools目录。

开始用tar命令解压我们的文件

[root@VM_11_203_centos tools]# tar -zxf jdk-7u67-linux-x64.tar.gz -C ../softwares/

解压完毕后,开始配置环境变量 这里不知道jdk的目录层级,可以使用pwd进行查看。

[root@VM_11_203_centos jdk1.7.0_67]# pwd /home/softwares/jdk1.7.0_67

开始修改配置文件

[root@VM_11_203_centos jdk1.7.0_67]# vim /etc/profile

在profile文件后面追加

export JAVA_HOME=/home/softwares/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin

使配置生效

[root@VM_11_203_centos jdk1.7.0_67]# source /etc/profile

测试环境变量,输入

[root@VM_11_203_centos jdk1.7.0_67]# java –version

出现

java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

说明我们的配置生效了,环境变量没有配错。 然后开始安装hadoop 解压我们一开始上传的hadoop文件

[root@VM_11_203_centos tools]# tar -zxf hadoop-2.7.1.tar.gz -C ../softwares/

解压完成后,进入我们的hadoop目录,来对其进行配置

[root@VM_11_203_centos tools]# cd ../softwares/hadoop-2.7.1/
[root@VM_11_203_centos hadoop-2.7.1]# cd etc/hadoop/

配置hadoop-env.sh ,主要是配置java的环境变量

[root@VM_11_203_centos hadoop-2.7.1]# vim hadoop-env.sh 修改export JAVA_HOME=${JAVA_HOME}为export JAVA_HOME=/home/softwares/jdk1.7.0_67

开始配置core-site.xml

回到hadoop主目录然后创建data目录,来存放我们hadoop的缓存目录。

[root@VM_11_203_centos hadoop-2.7.1]# mkdir data [root@VM_11_203_centos hadoop-2.7.1]# cd data [root@VM_11_203_centos data]# mkdir tmp [root@VM_11_203_centos data]# cd tmp [root@VM_11_203_centos hadoop-2.7.1]# cd etc/hadoop/ [root@VM_11_203_centos hadoop]# vim core-site.xml

在configuration标签下加入(一下文件配置都是在次标签下加入的)

<name>fs.defaultFs</name>
<value>hdfs://211.159.153.214:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/softwares/hadoop-2.7.1/data/tmp</value>
</property>

开始配置hdfs-site.xml(设置备份数,hadoop默认是三份,由于我们是伪分布式,所以一份就够了)

<name>dfs.replication</name>
<value>1</value>

然后开始格式化文件系统

[root@VM_11_203_centos hadoop-2.7.1]# bin/hdfs namenode –format

看到successfully formatted说明格式化成功

然后启动我们的进程

[root@VM_11_203_centos hadoop-2.7.1]# sbin/start-dfs.sh 遇到选项就输入yes 查看进程

[root@VM_11_203_centos hadoop-2.7.1]# jps
14262 NameNode
14385 DataNode
14601 SecondaryNameNode
14724 Jps

出现上面的说明启动成功。

若启动报错改变如下配置。

[root@VM_11_203_centos hadoop-2.7.1]# vim etc/hadoop/core-site.xml 在core-site.xml加入

<name>fs.default.name</name>
<value>hdfs://127.0.0.1:9000</value>
</property>

然后重新启动就发现启动成功了。

在浏览器输入http://211.159.153.214:50070/

说明打开成功了。

安装yarn,hadoop中的资源调度。

然后修改hadoop目录下的mapred-site.xml.template(主要是让咋们的mapreduce服从yarn的调度)

[root@VM_11_203_centos hadoop-2.7.1]# mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
[root@VM_11_203_centos hadoop-2.7.1]# vim etc/hadoop/mapred-site.xml

加入一下配置

<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

配置yarn-site.xml(配置mapreduce去数据的方式)

[root@VM_11_203_centos hadoop-2.7.1]# vim etc/hadoop/mapred-site.xml 
[root@VM_11_203_centos hadoop-2.7.1]# vim etc/hadoop/yarn-site.xml

增加如下配置

<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<!-- Site specific YARN configuration properties -->
</property>

启动

[root@VM_11_203_centos hadoop-2.7.1]# sbin/start-yarn.sh

jps看一下

14262 NameNode
15976 NodeManager
14385 DataNode
15884 ResourceManager
14601 SecondaryNameNode
16120 Jps

五个进程都启动成功,说明咋们的配置正确,启动中有什么错误请查看日志文件。 在浏览器输入http://211.159.153.214:8088/

说明我们整个hadoop配置成功。

开始测试(用hadoop做一下词频统计)

进入 data目录下

[root@VM_11_203_centos hadoop-2.7.1]# cd /home/data 
[root@VM_11_203_centos data]# touch words
[root@VM_11_203_centos data]# vim words

Hello a Hello b

统计单词出现的个数。

开始上传文件

[root@VM_11_203_centos data]# cd /home/softwares/hadoop-2.7.1/

开始上传文件

[root@VM_11_203_centos hadoop-2.7.1]# bin/hadoop fs -put /home/data/words /words

上传成功后输入命令开始统计

[root@VM_11_203_centos hadoop-2.7.1]#bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /words /out

然后查看结果

[root@VM_11_203_centos hadoop-2.7.1]# bin/hadoop fs -ls /
Found 3 items
drwxr-xr-x - root supergroup 0 2017-3-16 21:05 /out
drwx------ - root supergroup 0 2017-3-16 21:02 /tmp
-rw-r--r-- 1 root supergroup 16 2017-3-16 20:51 /words
[root@VM_11_203_centos hadoop-2.7.1]# bin/hadoop fs -ls /out
Found 2 items
-rw-r--r-- 1 root supergroup 0 2017-3-16 21:05 /out/_SUCCESS
-rw-r--r-- 1 root supergroup 16 2017-3-16 21:04 /out/part-r-00000

开始查看结果

root@VM_11_203_centos hadoop-2.7.1]# bin/hadoop fs -cat /out/part-r-00000

结果如下:

Hello 2 a 1 b 1

查询完成;

工作过程

hdfs原始数据: hello a hello b

map阶段: 输入数据: <0,"hello a"> <8,"hello b">

输出数据:

map(key,value,context) {
String line = value;    //hello a
String[] words = value.split("\t");
for(String word : words) {
//hello
// a
// hello 
// b
context.write(word,1);
}
}

< hello,1> < a,1> < hello,1> < b,1>

reduce阶段(分组排序): 输入数据: < a,1> < b,1> < hello,{1,1}>

输出数据:

reduce(key,value,context) {
int sum = 0;
String word = key;
for(int i : value) {
sum += i;
}
context.write(word,sum);
}

相关推荐

【腾讯云的1001种玩法】如何利用腾讯云搭建分布式应用

浅析海量用户的分布式系统设计(1)

高可用、高可靠的分布式文件系统

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Hadoop2.2.0 的安装和基本配置

Hadoop2.0的架构和1.0完全不一样,在安装配置上和1.0也有很大的不同,譬如配置文件的目录不一样了,还有要对yarn进行配置,这个在1.0是没有的。很多...

2744
来自专栏Hadoop实操

如何通过CM将CDSW从1.3升级至1.4

随着CDSW新版本的发布也提供了更多的新功能,具体参考Fayson前面文章《CDSW1.4的新功能》,本篇文章Fayson主要介绍如何通过Cloudera Ma...

883
来自专栏Java编程技术

Dubbo剖析-集群容错

在进行系统设计时候,不仅要考虑正常逻辑该如何走,还要考虑异常逻辑。dubbo中当服务消费方调用服务提供方的服务出现错误时候,提供了多种容错方案,缺省为 fail...

1031
来自专栏PHP技术大全

利用PHP扩展Taint找出网站的潜在安全漏洞实践

笔者从接触计算机后就对网络安全一直比较感兴趣,在做PHP开发后对WEB安全一直比较关注,2016时无意中发现Taint这个扩展,体验之后发现确实好用;不过当时在...

1112
来自专栏电光石火

eclipse配置tomcat运行时访问路径不要项目名称

1:双击打开tomcat 2:选择Modules,选择你要修改的项目 ? 3:点击Edit,把path修改成空或者你自己想要的路径即可! ?

3006
来自专栏散尽浮华

Linux操作系统启动流程梳理

接触linux系统运维已经好几年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程: 一般来说,所有的操作系统的启动流程基本就是: ? 总的...

2408
来自专栏Ken的杂谈

HBase集群部署指南

HBase是一个分布式的、面向列的开源数据库。 HBase在Hadoop之上提供了类似于Google Bigtable的能力。HBase不同于一般的关系数据库,...

4683
来自专栏pangguoming

VMware中CentOS设置静态IP

因为之前搭建的MongoDB分片没有采用副本集,最近现网压力较大,所以准备研究一下,于是在自己电脑的虚拟机中搭建环境,但是发现之前VMware设置的是DHCP,...

701
来自专栏北京马哥教育

汇总:Linux文件管理的50个命令

文 | 糖豆 图 | 来源网络 糖豆贴心提醒,本文阅读时间6分钟,文末有秘密! Linux cat命令 cat 命令用于连接文件并打印到标准输出设备上...

4466
来自专栏猿人谷

mac下使用github

      提起github相信大家都不会陌生,在这里就不再赘述了。作为开源代码库以及版本控制系统,使用好了确实会非常受益,再说的势利点,你找工作时给面试官说你...

1975

扫码关注云+社区