HDFS
- 镜像:centos_7_9_x64_20G_alibase
- Java:JDK 1.8.0_361
- Hadoop:Apache Hadoop 3.3.5
- node1: NameNode, DataNode, SecondaryNameNode
- node2,node3: DataNode
HDFS部署
配置HDFS集群,主要涉及以下文件(存于$HADOOP_HOME/etc/hadoop):
- workers: 配置DataNode
- hadoop-env.sh: 配置hadoop的相关环境变量
- core-site.xml: Hadoop核心配置文件
- hdfs-site.xml: HDFS核心配置文件
配置workers
1 2 3 4 5 6 7
| # 进入目录 cd etc/hadoop vim workers # 填入 node1 node2 node3
|
配置hadoop-env.sh
1 2 3 4 5
| vim hadoop-env.sh export JAVA_HOME=/export/server/jdk export HADOOP_HOME=/export/server/hadoop export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop # hadoop配置文件目录 export HADOOP_LOG_DIR=$HADOOP_HOME/logs # hadoop运行日志
|
配置core-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <configuration> <property> <name>fs.defaultFS</name> <!-- HDFS文件系统的网络通讯路径 --> <value>hdfs://node1:8020</value> <!-- 配置了node1为namenode,并且协议为hdfs://,端口为8020 --> </property>
<property> <name>io.file.buffer.size</name> <!-- io操作文件缓冲区大小,单位:字节(131072字节=128KB) --> <value>131072</value> </property> </configuration>
|
配置hdfs-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
| <configuration> <property> <name>dfs.datanode.data.dir.perm</name> <!-- hdfs默认创建的文件权限设置 --> <value>700</value> </property> <property> <name>dfs.namenode.name.dir</name> <!-- NameNode元数据的存储路径 --> <value>/data/nn</value> </property> <property> <name>dfs.namenode.hosts</name> <!-- hdfs白名单,允许哪些节点可以作为DataNode加入集群 --> <value>node1,node2,node3</value> </property> <property> <name>dfs.blocksize</name> <!-- HDFS文件块大小,256MB --> <value>268435456</value> </property> <property> <name>dfs.namenode.handler.count</name> <!-- NameNode处理的并发线程数 --> <value>100</value> </property> <property> <name>dfs.datanode.data.dir</name> <!-- DataNode的数据存储目录 --> <value>/data/dn</value> </property> </configuration>
|
创建数据存放目录
1 2 3 4 5 6
| # node1 mkdir -p /data/nn mkdir /data/dn
#node2, node3 mkdir -p /data/dn
|
分发Hadoop文件夹
1 2 3 4 5 6 7
| # 在node1当中执行 cd /export/server scp -r hadoop-3.3.5 node2:`pwd`/ scp -r hadoop-3.3.5 node3:`pwd`/
# 在node2,node3执行,为hadoop配置软连接 ln -s /export/server/hadoop-3.3.5 /export/server/hadoop
|
配置环境变量
1 2 3 4 5
| vim /etc/profile
# 追加 export HADOOP_HOME=/export/server/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
|
授权为hadoop用户
1 2 3
| # 以root的身份,在三台服务器上均执行 chown -R hadoop:hadoop /data chown -R hadoop:hadoop /export
|
格式化整个文件系统
1 2 3 4 5 6 7 8
| # 切换为hadoop su - hadoop hadoop namenode -format
# 启动hdfs集群,启动后可用公网ip:9870打开namenode的web界面 start-dfs.sh # 关闭hdfs集群 stop-dfs.sh
|
HDFS的shell操作
Hive
Hive配置
连接DataGrip
1 2 3 4 5
| start-dfs.sh start-yarn.sh cd /export/servers/hive nohup bin/hive --service metastore >> logs/metastore.log 2>&1 & nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
|
启动完毕后,在DataGrip中连接Hive,端口默认为10000。
可以用jps命令查看Hive的进程。结果如下:

常用语句
不同于MySQL,Hive的语法和MySQL的语法略微不同。
1 2 3 4 5 6 7 8 9 10
|
CREATE TABLE table_name ( column1 STRING, column2 INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;
|
1 2 3 4 5 6 7
| CREATE TABLE table_name ( column1 STRING, column2 INT ) PARTITIONED BY (partition_column STRING) STORED AS PARQUET;
|
1 2 3 4 5 6
| CREATE EXTERNAL TABLE table_name ( column1 STRING, column2 INT ) LOCATION '/path/to/external/data/';
|
1 2 3
|
LOAD DATA LOCAL INPATH '/path/to/data/file' INTO TABLE table_name;
|
1 2 3 4 5 6 7 8
| 分区是根据某个字段(或多个字段)的值,将数据存储在不同目录下的一种逻辑组织方式。每个分区实际上对应 HDFS 上的一个目录,分区字段的值决定了数据存放的位置。
CREATE TABLE sales ( id INT, amount FLOAT ) PARTITIONED BY (region STRING, date STRING);
|
1 2 3 4 5 6
| 分桶是将数据划分为多个桶(bucket),每个桶包含一部分数据。分桶表创建 CREATE TABLE sales ( id INT, amount FLOAT )
|
封面
