Hadoop基础学习笔记

(感谢慕课网)

hadoop生态:

  • HDFS:分布式存储
  • MapReduce:分布式计算
  • Hive:降低Hadoop使用门槛
  • Hbase:存储结构化数据的分布式数据库,与HDFS不同,Hbase提供数据的随机读写和实时访问,实现对表数据的访问功能
  • Zookeeper:节点管理

1、 HDFS:

HDFS的文件被分成快进行存储,默认块大小为64MB
  • NameNode:管理节点,存放文件元数据
    其中元数据为文件与数据块的映射表、数据块与数据节点的映射表
    NameNode中的内容会定期同步到Secondary NameNode中
  • DataNode:工作节点,存放数据块
    Hadoop默认把一个数据块保留3份
    DataNode定期向NameNode发送心跳信息
    HDFS适合数据批量读写,吞吐量高;适合一次写入,多次读取,顺序读写。
    不适合交互式应用,低延迟很难满足;不适合多用户并发写相同文件。
  • 查看HDFS某个目录下的文件(如 /user/root):
hadoop fs -ls /user/root
or
hdfs dfs -ls /user/root
  • HDFS下创建文件夹:
hadoop fs -mkdir /input  		
or
hdfs dfs -mkdir /input
  • 传输文件至HDFS:
hadoop fs -put hadoop.txt /input/ 
or
hdfs dfs -put hadoop.txt /input/ 
  • 获取HDFS下的文件:
hadoop fs -get /input/hadoop.txt hadoop2.txt
or 
hdfs dfs -get /input/hadoop.txt hadoop2.txt
  • 查看HDFS下的文件:
hadoop fs -cat /input/hadoop.txt
or 
hdfs dfs -cat /input/hadoop.txt

使用HDFS遇到的问题:
(1)错误表现:
SLF4J: Class path contains multiple
SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/zkpk/hbase-0.98.9-hadoop2/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
含义为:
发生jar包冲突了:
分别为:
file:/usr/hbase/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class
file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class
移除其中一个jar包即可解决方案:
使用下面命令:

cd /usr/hbase/lib 
rm slf4j-log4j12-1.6.4.jar

问题解决
转自:https://blog.csdn.net/chuyouyinghe/article/details/79134894
(2)配置完hadoop,使用HDFS的时候出现如下警告信息:

 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

直接在log4j日志中去除告警信息。在/usr/local/hadoop-2.5.2/etc/hadoop/log4j.properties文件中添加:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

转自:https://blog.csdn.net/l1028386804/article/details/51538611

2、MapReduce

MapReduce是一个并行计算框架,把一个大的任务分成多个小的任务(map),并行执行后合并结果(reduce)
(1)dfs.block.size可调节块大小。
(2)Map任务数量与maperd.map.tasks和mapred.min.split.size参数有关。
(3)设置combine操作:

job.setCombinerClass(MyReduce.class);

(4)Reduce任务的数量应设置的较大一些,最大值为72.
(5)调节一个节点上的Reduce任务数:

  • 配置文件中设置maperd.reduce.tasks;
  • 在代码中调用job.setNumReduceTasks(int n)方法。
    (6)Patitioner、Reducer、输出文件三者的数量是相等的。
    (7)Reduce过程会按照key排序。

猜你喜欢

转载自blog.csdn.net/xyx_HFUT/article/details/82916374