hdfs的配置
- hadoop-env.sh文件
export JAVA_HOME=/opt/modules/jdk1.7.0_67
- core-site.xml文件
<!--HDFS集群访问入口地址,写上namenode的主机名-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode的主机名:8020</value>
</property>
<!--声明存放数据的目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0-cdh5.3.6/data</value>
</property>
- hdfs-site.xml文件
dfs.replication
1
数据块的副本数不能大于 datanode的节点数量
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
- slaves文件
- 每行一个写上datanode的主机名
** 声明哪些服务器是datanode
** 每行一个主机名
- 每行一个写上datanode的主机名
格式化文件系统:
bin/hdfsnamenode−format启动服务:
b
i
n
/
h
d
f
s
n
a
m
e
n
o
d
e
−
f
o
r
m
a
t
启
动
服
务
:
sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode
hdfs命令
- 查看hdfs帮助:bin/hdfs dfs
- 列出hdfs文件:bin/hdfs dfs -ls
- 查看文件:bin/hdfs dfs -cat 文件url
yarn配置
yarn-env.sh mapred-env.sh文件:
export JAVA_HOME=/opt/modules/jdk1.7.0_67yarn-site.xml文件
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
主机名
mapred-site.xml文件
mapreduce.framework.name
yarn
启动yarn
sbin/yarn−daemon.shstartresourcemanager s b i n / y a r n − d a e m o n . s h s t a r t r e s o u r c e m a n a g e r sbin/yarn-daemon.sh start nodemanager
yarn命令
- 查看yarn帮助:bin/yarn
- 运行jar包:bin/yarn jar jar包位置 自定义工程名(最好写wordcount不然可能会报错,不知道为什么) 数据输入url 数据输出url
日志服务器的配置
- 配置日志服务器:
- yarn-site.xml文件
<!--启用日志聚合功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--日志保存时间-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
- mapred-site.xml文件
<!--进程通信-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>bigdata1.com:10020</value>
</property>
<!--客户端访问入口-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>bigdata1.com:19888</value>
</property>
启动historyserver服务
$ sbin/mr-jobhistory-daemon.sh start historyserver
namenode的启动过程
- 启动namenode
*读取fsimage生成内存中元数据镜像,加载到内存中
读取editlog日志文件,加载到内存上使当前内存中元数据信息与上次关闭系统是保持一致(每次重新启动fsimage都会与editlog进行自动合并,并不需要Secondary NameNode),然后在磁盘上生成一份同内存中元数据镜像相同的fsimage文件,
同时生成一个新的null的editlog文件用来记录以后的hdfs文件系统的更改
启动成功后:clinent对hdfs进行操作,在没有SecondaryNmaeNode守护进程的情况下,所有对hdfs的操作都将记录到editlog文件,这样会造成巨大的editlog文件,危害时下次启动namenode会非常的漫长;在启动SecondaryNameNode守护进程后,没当满足一定的触发条件,SecondaryNameNode都会拷贝namenode的fsimage和editlog文件到自己的目录下,首先将fsimage加载到内存中,然后加载editlog文件到内存中合并fsimage和editlog文件为一个新的fsimage文件,然后将新的fsimage文件拷贝会namenode目录下,并且声称新的editlog文件用于dfs的更改*
相关错误汇总
格式化报错处理
1.修改元数据,使其统一
查看datanode的 cd /opt/modules/hadoop-2.5.0-cdh5.3.6/data/dfs/data/current/BP-1120641359-192.168.65.119-1532430810525/current
下的VARSION文件中的
[hadoop@master01 current]vi VERSION
namespaceID=1638354450 #元数据ID
查看namenode元数据ID
cd /opt/modules/hadoop-2.5.0-cdh5.3.6/data/dfs/name/current
[hadoop@master01 current] vi VERSION namespaceID=1638354450 #元数据ID 查看namenode元数据ID cd /opt/modules/hadoop-2.5.0-cdh5.3.6/data/dfs/name/current [hadoop@master01 current] vi VERSION
namespaceID=1638354450 #元数据ID
把namenode与datanode的元数据ID修改一致2.直接删除hadoop下的data文件夹重新格式化
$bin/hdfs namenode -format
错误IOException
- 错误信息
java.io.IOException: Failed on local exception: java.net.SocketException: Unresolved address; Host Details : local host is: "node-1"; destination host is: (unknown):0;
- 解决办法:将hosts中ip地址放在前面, 然后删除data重新格式化
MapReduce
任务流程分析
- 逻辑切片:逐步遍历待处理的数据目录下的文件
- 1.txt 150M 2.txt 80M
- split1–>1.txt 0-128M split2–>1.txt 128M-150M split3–>2.txt-80M
- 切片的个数决定了本次mr程序启动多少个maptask
- 然后TextInputFormat组件进行对maptask进行读取,以行为单位,读取结果为K,V对K:起始偏移量V:这一行内容
- 把k,v,context传给map方法
- context.write(k1,v1)写到内存缓冲区(快)
- 内存溢出到磁盘
- 根据reducetask个数进行分区,默认按照hashcode进行分区(分区个数job.setNumReduceTask)
- 在每个分区内根据键值对进行排序
- 选(局部聚合combiner处理,对键相同的会调用一次reduce方法)
- reduce拉去属于自己分区的数据 ,按照key是否相同作为一组来调用我们重写的reduce方法
- context.write(k2,v2)
- 使用TestOutputFormat组件输出到指定路径(hdfs上)