fenlan

Everything gonna be fine in the end, if it's not fine, it's not the end.

0%

hadoop之旅

hadoop介绍

以下是 Hadoop 的几种定义,每种定义都针对的是企业内的不同受众:

  • 对于高管:Hadoop 是 Apache 的一个开源软件项目,目的是从令人难以置信的数量/速度/多样性等有关组织的数据中获取价值。使用数据,而不是扔掉大部分数据。
  • 对于技术管理人员:一个开源软件套件,挖掘有关您的企业的结构化和非结构化大数据。Hadoop 集成您现有的商业智能生态系统。
  • 工程:大规模并行、无共享、基于 Java 的 map-reduce 执行环境。打算使用数百台到数千台计算机处理相同的问题,具有内置的故障恢复能力。Hadoop 生态系统中的项目提供了数据加载、更高层次的语言、自动化的云部署,以及其他功能。
  • 安全性:由 Kerberos 保护的软件套件。

hadoop组件

下图显示了Hadoop生态系统各种组件
Hadoop

Apache Hadoop 由两个子项目组成

  1. Hadoop MapReduce : MapReduce 是一种计算模型及软件架构,编写在Hadoop上运行的应用程序。这些MapReduce程序能够对大型集群计算节点并行处理大量的数据。
  2. HDFS (Hadoop Distributed File System): HDFS 处理 Hadoop 应用程序的存储部分。 MapReduce应用使用来自HDFS的数据。 HDFS创建数据块的多个副本,并集群分发它们到计算节点。这种分配使得应用可靠和极其迅速的计算。

如果还是不清楚,再解释一下

  • HDFS:如果您希望有 4000 多台电脑处理您的数据,那么最好将您的数据分发给 4000 多台电脑。HDFS 可以帮助您做到这一点。HDFS 有几个可以移动的部件。Datanodes 存储数据,Namenode 跟踪存储的位置。还有其他部件,但这些已经足以使您开始了。
  • MapReduce:这是一个面向 Hadoop 的编程模型。有两个阶段,毫不意外,它们分别被称为 Map 和 Reduce。如果希望给您的朋友留下深刻的印象,那么告诉他们,Map 和 Reduce 阶段之间有一个随机排序。JobTracker 管理您的 MapReduce 作业的 4000 多个组件。TaskTracker 从 JobTracker 接受订单。如果您喜欢 Java,那么用 Java 编写代码。如果您喜欢 SQL 或 Java 以外的其他语言,您的运气仍然不错,您可以使用一个名为 Hadoop Streaming 的实用程序。

需要根本性理解这两个东西,否则配置的时候跟着教程走会遇到问题
附上参考地址1 参考地址2

说说联机

首先准备ssh

为了使用Hadoop的时候免于密码登录其他Slaves,需要对ssh进行设置。
生成登录钥匙,分为公钥和私钥

1
ssh-keygen -t rsa

一直敲回车(如果之前进行过这种操作,会提示是否覆盖之前的内容,输入y回车),进行完这一步后系统会在~/.ssh/目录下生成两个文件,一个是私钥,一个是公钥,需要把公钥放在联机主机上
1
ssh-copy-id -p port username@remote-server

登录测试一下,通常第一次登录需要密码,之后不需要,如果碰到

1
connect to host localhost port 22: connection refused

有两种可能,一种是你的ssh服务没有打开通过一下命令打开

1
sudo service sshd restart

另一种可能是你的ssh—agent和ssh-server等设置不一致,需要将/etc/ssh/ssh_config/etc/ssh/sshd_config两个文件里面的端口设置相同

如果需要这种情况

1
sign_and_send_pubkey: signing failed: agent refused operation

需要敲ssh-add就解决问题

联机

联机设置主要在hadoop/etc/hadoop/mastershadoop/etc/hadoop/slaves里面,在所有机子上设置masters为主机ip地址,而只在主机上添加其他所有联机设备的ip地址(2.x版本不需要masters文件,因此不必配置masters文件)

说明:slaves里面同样可以写主机hostname,如果写hostname, 需要配合/etc/hosts一起配置

masters and slaves

然后在主机上启动hadoop,并通过localhost:50070查看Hadoop信息和连接情况

如果在网页上没有出现我们的datanode,可能是需要进入没有出现的slaves,找到之前hdfs.site.xml配置的目录,将其目录下的所有文件删掉就ok

Hadoop下载安装

进入Hadoop官网找到最新的稳定版下载

下载界面

下载完成后将压缩包解压并重命名为hadoop(为了方便)

配置

编辑hadoop/etc/hadoop/core-site.xml,指定NameNode的主机名和端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/fenlan/Downloads/hadoop/tmp</value>
</property>
</configuration>

需要说明属性hadoop.tmp.dir的值是一个你电脑上的目录,为了方便,最好将它设置在hadoop目录下。而fs.defaultFS的值是主机+端口,hadoop-master可以在/etc/hosts里面设置,一般本机设置默认为localhostfs.default.name的值统一为masters下的主机名称.

编辑hadoop/etc/hadoop/hdfs-site.xml,指定HDFS的默认副本数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/fenlan/Downloads/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/fenlan/Downloads/hadoop/hdfs/datanode</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:/home/fenlan/Downloads/hadoop/hdfs/namesecondary</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.block.size</name>
<value>134217728</value>
</property>
</configuration>

编辑hadoop/etc/hadoop/mapred-site.xml,指定JobTracker的主机名和端口(如果没有,直接复制mapred-site.xml.template)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop-master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop-master:19888</value>
</property>
<!--
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>file:/home/fenlan/Downloads/hadoop/app</value>
</property>
-->
</configuration>

编辑hadoop/etc/hadoop/yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<configuration>

<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master</value>
</property>
<!--
<property>
<name>yarn.resourcemanager.bind-host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>yarn.nodemanager.bind-host</name>
<value>0.0.0.0</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>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:/home/fenlan/Downloads/hadoop/yarn/local</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>file:/home/fenlan/Downloads/hadoop/yarn/log</value>
</property>
<!--
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>hdfs://hadoop-master:9000/home/fenlan/Downloads/hadoop/yarn-log/apps</value>
</property>
-->
</configuration>

修改hadoop/etc/hadoop/hadoop-env.sh,将里面的JAVA_HOME设置为JAVA安装根目录

1
export HAVA_HOME=/home/fenlan/Downloads/jdk1.8.0_60

想知道本机JAVA_HOME,敲个which java就知道了

编辑hadoop/etc/hadoop/master,添加namenode主机,hadoop/etc/hadoop/slaves,添加datanode主机

1
hadoop-master

1
2
hadoop-slave1
hadoop-slave2

需要说明,hadoop-slave hadoop-master为主机的hostname, 为了方便管理,需要将主机的hostname修改, 比如我的电脑开始hostname是fenlan-K401UQ, 在我的教程里面就需要改成hadoop-slave1(相当重要,否则在运行程序是会报错找不到主机),这里我个人感激仍然没有讲清楚,下面有一个youtube视频教程,辅助理解

格式化HDFS

1
bin/hdfs namenode -format

启动Hadoop的单节点集群

1
2
3
4
sbin/start-dfs.sh
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver
sbin/start-all.sh

停止Hadoop

1
2
3
4
sbin/stop-dfs.sh
sbin/stop-yarn.sh
sbin/mr-jobhistory-daemon.sh stop historyserver
sbin/stop-all.sh

加载HDFS

1
2
3
bin/hadoop fs -mkdir /fenlan/input
bin/hadoop fs -mkdir /fenlan/output
bin/hadoop fs -put files /fenlan/input

运行一个单词统计实例

1
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount /fenlan/input /fenlan/output/result

查看结果

1
bin/hadoop fs -cat /fenlan/output/result/*

推荐教程

hadoop搭建教程
hadoop分布式集群搭建
视频教程(youtube)

HBase 安装

  1. 官网下载HBase,解压包并重命名为hbase
  2. 编辑hbase/conf/hbase-env.shJAVA_HOME
  3. 编辑hbase/conf/hbase-site.xml如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <configuration>
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://hadoop-master:9000/hbase</value>
    </property>
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <property>
    <name>hbase.master</name>
    <value>hadoop-master:60000</value>
    </property>
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>hadoop-master,hadoop-slave1,hadoop-slave2</value>
    </property>
    <property>
    <name>hbase.master.info.port</name>
    <value>60010</value>
    </property>
    <property>
    <name>hbase.master.port</name>
    <value>60000</value>
    </property>
    </configuration>
  4. 编辑hbase/conf/regionservers添加slaves主机

  5. 启动HBase(先启动hadoop)

    1
    bin/start-hbase.sh
  6. 管理HBase

    1
    bin/hbase shell

问题总结

1.当无法启动datanode时将hadoop/hdfs/datanode/current/文件夹删掉重新启动
2.安装hive时hive-site.xml中有两个配置hive.exec.local.scratchdirhive.downloaded.resources.dir的文件路径是本地路径,而不是HDFS路径,其他的配置是HDFS路径,如果配置错误会出现无法创建目录的问题

教程如果有错误,欢迎留言!