hadoop (一)环境搭建及示例运行
hadoop 是什么?
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。
HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
liunx虚拟服务器搭建
参考我的另一篇帖子:liunx虚拟服务器搭建
hadoop服务器搭建
hadoop 源码下载
svn co http://svn.apache.org/repos/asf/hadoop/common/tags/release-0.20.2/
mv release-0.20.2 hadoop-0.20.2
修改版本号version为0.20.2
<property file="${user.home}/build.properties" />
<property file="${basedir}/build.properties" />
<property name="Name" value="Hadoop"/>
<property name="name" value="hadoop"/>
<property name="version" value="0.20.2"/>
<property name="final.name" value="${name}-${version}"/>
<property name="year" value="2009"/>
编译代码
ant
ant jar
ant examples
出现 BUILD SUCCESSFUL 就OK 了。
配置SSH免密登录
配置核心配置文件(conf目录下)
core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<!-- node3为主节点的别名,也可以是ip -->
<value>hdfs://node3:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/liuzd/hadoop-0.20.2/tmpPath</value>
</property>
<!-- 解决本地idea 远程调用 liunx的hadoop服务器 出现class加载问题 -->
<property>
<name>mapred.jar</name>
<value>E:\java\myHadoop\out\artifacts\myHadoop_jar\myHadoop.jar</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- 解决操作dfs操作权限问题,设置为无权限 -->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
mapred-site.xml
<configuration>7/27/2018 4:34:22 PM
<property>
<name>fs.default.name</name>
<value>hdfs://node3:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://node3:9001</value>
</property>
</configuration>
修改hadoop jdk环境配置
vi conf/hadoop-env.sh
修改内容:export JAVA_HOME=/home/liuzd/jdk1.7.0_79
打开JAVA_HOME注释,并配置为主机环境的jdk目录。
运行hadoop服务
进入hadoop主目录:
-
格式换namenode
./bin/hadoop namenode -format
-
启动所有服务
bin/start-all.sh
附:关闭所有服务
bin/stop-all.sh
-
启动成功标志
访问:http://192.168.56.104:50070 可以正常访问,并且namenode的livenode节点为1.
该ip也就是我node3主机的ip。image
-
查看hadoop进程,jps 查看当前java进程,hadoop包含以下进程:
3624 SecondaryNameNode
3434 NameNode
4325 Jps
3686 JobTracker
4707 DataNode
4824 TaskTracker
系统启动正常后,跑个程序吧
构造hdfs分布式文件系统数据
$mkdir input
$cd input
$echo "hello world">test1.txt
$echo "hello hadoop">test2.txt
$cd ..
$bin/hadoop dfs -put input in
执行hadoop源码单词计数MapReduce
$bin/hadoop jar build/hadoop-0.20.2-examples.jar wordcount in out
输出:
18/07/27 16:26:55 INFO input.FileInputFormat: Total input paths to process : 2
18/07/27 16:26:56 INFO mapred.JobClient: Running job: job_201807271436_0007
18/07/27 16:26:57 INFO mapred.JobClient: map 0% reduce 0%
18/07/27 16:27:04 INFO mapred.JobClient: map 100% reduce 0%
18/07/27 16:27:16 INFO mapred.JobClient: map 100% reduce 100%
18/07/27 16:27:18 INFO mapred.JobClient: Job complete: job_201807271436_0007
18/07/27 16:27:18 INFO mapred.JobClient: Counters: 17
18/07/27 16:27:18 INFO mapred.JobClient: Job Counters
18/07/27 16:27:18 INFO mapred.JobClient: Launched reduce tasks=1
18/07/27 16:27:18 INFO mapred.JobClient: Launched map tasks=2
18/07/27 16:27:18 INFO mapred.JobClient: Data-local map tasks=2
18/07/27 16:27:18 INFO mapred.JobClient: FileSystemCounters
18/07/27 16:27:18 INFO mapred.JobClient: FILE_BYTES_READ=55
18/07/27 16:27:18 INFO mapred.JobClient: HDFS_BYTES_READ=25
18/07/27 16:27:18 INFO mapred.JobClient: FILE_BYTES_WRITTEN=180
18/07/27 16:27:18 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=25
18/07/27 16:27:18 INFO mapred.JobClient: Map-Reduce Framework
18/07/27 16:27:18 INFO mapred.JobClient: Reduce input groups=3
18/07/27 16:27:18 INFO mapred.JobClient: Combine output records=4
18/07/27 16:27:18 INFO mapred.JobClient: Map input records=2
18/07/27 16:27:18 INFO mapred.JobClient: Reduce shuffle bytes=61
18/07/27 16:27:18 INFO mapred.JobClient: Reduce output records=3
18/07/27 16:27:18 INFO mapred.JobClient: Spilled Records=8
18/07/27 16:27:18 INFO mapred.JobClient: Map output bytes=41
18/07/27 16:27:18 INFO mapred.JobClient: Combine input records=4
18/07/27 16:27:18 INFO mapred.JobClient: Map output records=4
18/07/27 16:27:18 INFO mapred.JobClient: Reduce input records=4
查看最终结果
$bin/hadoop dfs -cat out/*
输出:
hadoop 1
hello 2
world 1
完美ENDING
附录1 错误记录
put: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create file/user/liuzd/test2.tar.gz. Name node is in safe mode.
hadoop处于安全模式下,只允许读。
命令 hadoop dfsadmin -safemode get 查看安全模式状态
命令 hadoop dfsadmin -safemode enter进入安全模式状态
命令 hadoop dfsadmin -safemode leave 离开安全模式
安全模式是hadoop的一种保护机制,在启动时,最好是等待集群自动退出,然后进行文件操作。
一般进入safemode情况有:①启动或者重新启动hdfs时;②HDFS维护升级时
可以使用fsck 检查一下HDFS的健康度
fsck相关介绍:
hadoop fsck
Usage:DFSck <path> [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]
<path> 检查这个目录中的文件是否完整
-move 破损的文件移至/lost+found目录
-delete 删除破损的文件
-openforwrite 打印正在打开写操作的文件
-files 打印正在check的文件名
-blocks 打印block报告(需要和-files参数一起使用)
-locations 打印每个block的位置信息(需要和-files参数一起使用)
-racks 打印位置信息的网络拓扑图(需要和-files参数一起使用)
hadoop fsck /
用这个命令可以检查整个文件系统的健康状况,但是要注意它不会主动恢复备份缺失的block,这个是由NameNode单独的线程异步处理的
网友评论