Hadoop
HDFS
HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。
YARN
ResourceManager(资源管理器):
ResourceManager是YARN集群的主节点,负责整个集群的资源管理和任务调度。它接收来自客户端、应用程序和NodeManager的资源请求,分配和调度集群中的资源。ResourceManager还负责监控集群的健康状态,处理故障和任务的重新分配,以确保高可用性和稳定性。
NodeManager(节点管理器):
NodeManager是YARN集群中每个节点上的组件,负责管理和监控该节点上的计算资源。NodeManager通过向ResourceManager注册自己的资源和容器信息,将自身纳入到集群的资源管理中。它负责启动和监控容器,接收来自ResourceManager的资源分配指令,并向ResourceManager报告计算资源的使用情况。
MySQL到HIVE的数据同步
今天在网上看到一种从MySQL到Hive的数据同步方案,主要的思想是使用canal client将MySQL的binlog转化成直观数据,再通过merge放入到Hive中,接着用spark进行计算分析,接下来的几天利用项目机会进行学习。
root@31e2a4eef478:/opt# hive
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hive/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hadoop-2.7.1/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Logging initialized using configuration in file:/opt/hive/conf/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. tez, spark) or using Hive 1.X releases.
hive> show databases;
OK
default
Time taken: 0.645 seconds, Fetched: 1 row(s)
hive> use default;
OK
Time taken: 0.035 seconds
hive> show tables;
OK
Time taken: 0.042 seconds
hive> create table student(id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
OK
Time taken: 0.379 seconds
hive> show tables;
OK
student
Time taken: 0.02 seconds, Fetched: 1 row(s)
hive> select * from student;
OK
Time taken: 0.836 seconds
hive> load data local inpath '/opt/student.txt' into table student;
Loading data to table default.student
OK
Time taken: 0.558 seconds
hive> select * from student;
OK
1 zhang
2 bei
3 ji
4 nu
Time taken: 0.067 seconds, Fetched: 4 row(s)
root@31044f02d06d:/home# hadoop fs -put student.txt /user/hive/warehouse/student
put: `/user/hive/warehouse/student/student.txt': File exists
root@31044f02d06d:/home# cp student.txt student2.txt
root@31044f02d06d:/home# ls
student.txt student2.txt
root@31044f02d06d:/home# hadoop fs -put student2.txt /user/hive/warehouse/student
#把student2的文件内容加到Hive的表中
ive> select * from student;
OK
1 zhang
2 bei
3 ji
4 nu
NULL NULL
Time taken: 0.803 seconds, Fetched: 5 row(s)
hive> load data inpath 'hdfs://namenode:8020/student3.txt' into table student;
Loading data to table default.student
OK
Time taken: 0.217 seconds
hive> select * from student;
OK
1 zhang
2 bei
3 ji
4 nu
NULL NULL
5 NULL
Time taken: 0.052 seconds, Fetched: 6 row(s)
./sqoop import \
--connect jdbc:mysql://192.168.31.160:3306/i_member \
--username root \
--password xxxxx \
--table t_member \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \ 数据进行覆盖而不是追加
--hive-database i_member \ 如果不指定数据库,那么移动的表将会存在hive的default表中
--hive-table t_member