欢迎光临
我们一直在努力

Hadoop 大数据集群

百度云盘资源包

1. Hadoop的伪分布式安装

简介:

Hadoop的安装是使用Hadoop的前提,Hadoop的安装可以分为三种模式:单机模式,伪分布式模式,集群模式(完全分布式模式)

1. 配置ssh无密码登录

sudo apt update

sudo apt-get install ssh

ssh-keygen -t rsa

ll ~/.ssh

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

chmod 755 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

ssh -Version

ssh localhost
exit #退出

2. 安装JDK

javac

tar -zxvf jdk-8u191-linux-x64.tar.gz

sudo vi /etc/profile

export JAVA_HOME=/home/wst/JDK/jdk-8u191-linux-x64/jdk1.8.0_191
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

source /etc/profile

java -version

3. 安装Hadoop

ip addr#查看ip地址
hostname#查看主机名
sudo vi /etc/hosts#修改主机ip地址

tar -zxvf hadoop-3.3.1.tar.gz

cd hadoop-3.3.1
ls -l

sudo /etc/profile

export HADOOP_HOME=/home/wst/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

source /etc/profile

hadoop version

sudo vi ~/.bashrc

export JAVA_HOME=/home/wst/JDK/jdk-8u191-linux-x64/jdk1.8.0_191
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export HADOOP_HOME=/home/wst/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

source ~/.bashrc

4. 修改Hadoop配置文件

export JAVA_HOME=/home/wst/JDK/jdk-8u191-linux-x64/jdk1.8.0_191

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://10.0.2.15:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/wst/hadoop-3.3.1/tmp</value>
</property>
</configuration>

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>10.0.2.15</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>1</value>
</property>
</configuration>

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>10.0.2.15:50090</value>
</property>
</configuration>

sudo chmod 777 $HADOOP_HOME

hdfs namenode -format

start-all.sh
stop-all.sh

HDFS端口号:master:9870

YARN端口号:master:8088

5. 非正常化关机进入(initramfs)界面

```shell fsck -t ext4 /dev/sda1 ```

2. 完全分布式集群搭建

1. 设置网络

添加一张仅主机模式网卡,用于创建内部网络(master,slave1,slave2.)

2. 修改ip地址

```shell ip addr ```
sudo vi /etc/network/interfaces

auto lo
iface lo inet loopback
auto enp0s8 # 网卡名
# 设置为static
iface enp0s8 inet static
# 更改为我们需要的IP
address 192.168.56.100
netmask 255.255.255.0
broadcast 192.168.56.255

sudo /etc/init.d/networking restart

3. 修改主机名

```shell hostname ```
sudo vi /etc/hostname

  • 将主机名修改为master

ip addr
hostname

4. 修改Hadoop配置文件

(1)将hdfs-set.xml, core-set.xml, yarn-set.xml, mapred-set.xml中的10.0.2.15换成master
sudo vi /etc/hosts

192.168.56.100 master
192.168.56.110 slave1
192.168.56.120 slave2

sudo vi ./hadoop-3.3.1/etc/hadoop/masters

master

sudo vi ./hadoop-3.3.1/etc/hadoop/workers

slave1
slave2

最后删除临时文件

5. 出现以太网未托管的解决方法

```shell sudo vi /etc/NetworkManager/NetworkManager.conf ```

将false改为true

sudo service network-manager restart

6. 复制虚拟机

(1)复制两台虚拟机命名为slave1,slave2

  • 注意:勾选重新初始化所以网卡的MAC地址和完全复制

(2)设置slave服务器

sudo vi /etc/network/interfaces

auto lo
iface lo inet loopback
auto enp0s8 # 网卡名
# 设置为static
iface enp0s8 inet static
# 更改为我们需要的IP
address 192.168.56.110
netmask 255.255.255.0
broadcast 192.168.56.255

sudo /etc/init.d/networking restart

sudo vi /etc/network/interfaces

auto lo
iface lo inet loopback
auto enp0s8 # 网卡名
# 设置为static
iface enp0s8 inet static
# 更改为我们需要的IP
address 192.168.56.120
netmask 255.255.255.0
broadcast 192.168.56.255

sudo /etc/init.d/networking restart

sudo vi /etc/hostname

  • 将master修改为slave1
  • 修改slave2主机名

sudo /etc/hostname

  • 将master修改为slave2
  • 重启虚拟机,查看ip地址和主机名是否修改成功

7. 设置master服务器到slave服务器的免密登录

```shell ssh slave1 exit ssh slave2 exit ```

8. 格式化文件系统

```shell hdfs namenode -format ```
start-all.sh
stop-all.sh

9. 在Hadoop集群中运行程序

```shell hadoop jar ./hadoop-3.3.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar pi 10 10 ```

若出现Hadoop:找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster

1.输入

hadoop classpath

2.将输出的内容直接复制到yarn-site.xml文件中:

<property>
<name>yarn.application.classpath</name>
<value>hadoop classpath的输出内容</value>
</property>

10. HDFS命令

1、查看hdfs或hadoop子命令的帮助信息,如ls子命令
hdfs dfs -help ls
hadoop fs -help ls

2、查看hdfs文件系统中已经存在的文件。对比linux命令ls

hdfs dfs -ls /
hadoop fs -ls /
hadoop fs -ls -R / #递归显示目录结构

3、在hdfs文件系统中创建文件

hdfs dfs -touchz /words.txt

4、向hdfs文件中追加内容

hadoop fs -appendToFile edit1.xml /edits.txt #将本地磁盘当前目录下的exit1.xml追加到HDFS根目录的edits.txt文件

5、查看HDFS文件内容

hdfs dfs -cat /words.txt

6、从本地路径上传文件至HDFS

#用法:hdfs dfs -put /本地路径 /hdfs路径
hdfs dfs -put hadoop-2.7.3.tar.gz /
hdfs dfs -copyFromLocal hadoop-2.7.3.tar.gz / #跟put作用一样
hdfs dfs -moveFromLocal hadoop-2.7.3.tar.gz / #跟put作用一样,只不过,源文件被拷贝成功后,会被删除

7、在hdfs文件系统中下载文件

hdfs dfs -get /hdfs路径 /本地路径
hdfs dfs -copyToLocal /hdfs路径 /本地路径 #跟get作用一样

8、在hdfs文件系统中创建目录

hdfs dfs -mkdir /shell

9、在hdfs文件中删除文件

hdfs dfs -rm /edits.txt
hdfs dfs -rm -r /shell
haddoop fs -rm -R /dir #递归删除目录和文件

10、在hdfs文件系统中修改文件名称(也可以用来移动文件到目录)

hdfs dfs -mv /xcall.sh /call.sh
hdfs dfs -mv /call.sh /shell

11、在hdfs中拷贝文件到目录

hdfs dfs -cp /xrsync.sh /shell

12、递归删除目录

hdfs dfs -rmr /shell

13、列出本地文件的内容(默认是hdfs文件系统)

hdfs dfs -ls file:///home/zsc/

14、查找文件

# linux find命令
find . -name 'edit*'

# HDFS find命令
hadoop fs -find / -name part-r-00000 #在HDFS根目录中,查找part-r-00000文件

3. 高可用集群搭建

1. 删除临时文件

```plain rm -rf hadoop-3.3.1/logs/* ```

2. 修改配置文件

1. core-site
<configuration>
<!– 指定hdfs的nameservice为ns1 –>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.200.8:8020</value>
</property>
<!– 指定hadoop临时目录 –>
<property>
<name>hadoop.tmp</name>
<value>/home/wst/hadoop-3.3.1/tmp</value>
</property>
<!– 指定zookeeper地址 –>
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave01:2181,slave02:2181</value>
</property>
</configuration>

  • hdfs-site
  • <configuration>
    <!– 设置副本个数 –>
    <property>
    <name>dfs.replication</name>
    <value>2</value>
    </property>
    <!– 设置namenode.name目录 –>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/wst/hadoop-3.3.1/logs/name</value>
    </property>
    <!– 设置namenode.data目录 –>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/wst/hadoop-3.3.1/data</value>
    </property>
    <!– 开启webHDFS –>
    <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
    <!– 在NN和DN上开启WebHDFS (REST API)功能,不是必须 –>
    </property>
    <!–指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 –>
    <property>
    <name>dfs.nameservices</name>
    <value>192.168.200.8</value>
    </property>
    <!– ns1下面有两个NameNode,分别是nn1,nn2 –>
    <property>
    <name>dfs.ha.namenodes.ns1</name>
    <value>192.168.200.8,192.168.200.9</value>
    </property>
    <!– nn1的RPC通信地址 –>
    <property>
    <name>dfs.namenode.rpc-address.ns1.nn1</name>
    <value>192.168.200.8:9000</value>
    </property>
    <!– nn1的http通信地址 –>
    <property>
    <name>dfs.namenode.http-address.ns1.nn1</name>
    <value>192.168.200.8:50070</value>
    </property>
    <!– nn2的RPC通信地址 –>
    <property>
    <name>dfs.namenode.rpc-address.ns1.nn2</name>
    <value>192.168.200.9:9000</value>
    </property>
    <!– nn2的http通信地址 –>
    <property>
    <name>dfs.namenode.http-address.ns1.nn2</name>
    <value>192.168.200.9:50070</value>
    </property>
    <!– 指定NameNode的元数据在JournalNode上的存放位置 –>
    <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>
    qjournal://master:8485;slave1:8485;slave2:8485/ns1
    </value>
    </property>
    <!– 指定JournalNode在本地磁盘存放数据的位置 –>
    <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/wst/hadoop-3.3.1/data/hadoop/journaldata</value>
    </property>
    <!– 开启NameNode失败自动切换 –>
    <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
    </property>
    <!– 配置失败自动切换实现方式 –>
    <property>
    <name>dfs.client.failover.proxy.provider.ns1</name>
    <value>
    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    </value>
    </property>
    <!– 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行–>
    <property>
    <name>dfs.ha.fencing.methods</name>
    <value>
    sshfence
    shell(/bin/true)
    </value>
    </property>
    <!– 使用sshfence隔离机制时需要ssh免登陆 –>
    <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
    </property>
    <!– 配置sshfence隔离机制超时时间 –>
    <property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
    </property>
    </configuration>

  • yarn-site
  • <configuration>

    <!– Site specific YARN configuration properties –>
    <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>2048</value>
    </property>
    <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>2048</value>
    </property>
    <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>1</value>
    </property>
    <!– 开启RM高可用 –>
    <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
    </property>
    <!– 指定RM的cluster id –>
    <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yrc</value>
    </property>
    <!– 指定RM的名字 –>
    <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
    </property>
    <!– 分别指定RM的地址 –>
    <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>192.168.200.8</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>192.168.200.9</value>
    </property>
    <!– 指定zk集群地址 –>
    <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>

    </configuration>

    3. 分发配置文件

    ```plain wst@master:~$ scp hadoop-3.3.1/etc/hadoop/hdfs-site.xml wst@slave1:hadoop-3.3.1/etc/hadoop/ hdfs-site.xml 100% 3585 1.7MB/s 00:00 wst@master:~$ scp hadoop-3.3.1/etc/hadoop/hdfs-site.xml wst@slave2:hadoop-3.3.1/etc/hadoop/ hdfs-site.xml 100% 3585 1.9MB/s 00:00 wst@master:~$ scp hadoop-3.3.1/etc/hadoop/core-site.xml wst@slave2:hadoop-3.3.1/etc/hadoop/ core-site.xml 100% 1130 326.4KB/s 00:00 wst@master:~$ scp hadoop-3.3.1/etc/hadoop/core-site.xml wst@slave1:hadoop-3.3.1/etc/hadoop/ core-site.xml 100% 1130 330.1KB/s 00:00 wst@master:~$ scp hadoop-3.3.1/etc/hadoop/yarn- wst@slave1:hadoop-3.3.1/etc/hadoop/ hadoop-3.3.1/etc/hadoop/yarn-env.cmd hadoop-3.3.1/etc/hadoop/yarn-site.xml hadoop-3.3.1/etc/hadoop/yarn-env.sh wst@master:~$ scp hadoop-3.3.1/etc/hadoop/yarn-site.xml wst@slave1:hadoop-3.3.1/etc/hadoop/ yarn-site.xml 100% 1259 518.7KB/s 00:00 wst@master:~$ scp hadoop-3.3.1/etc/hadoop/yarn-site.xml wst@slave2:hadoop-3.3.1/etc/hadoop/ yarn-site.xml ```

    4. 启动journalnode

    ```plain wst@master:~$ hadoop-daemon.sh start journalnode ```

    5. 格式化

    ```plain

    <h1 id="MEleA"><font style="color:rgb(51, 51, 51);">3. MySQL的安装与配置</font></h1>
    <h3 id="seXsO"><font style="color:rgb(51, 51, 51);">1. 上传与解压MySQL</font></h3>
    ```shell
    mkdir mysql
    cd mysql
    tar -xvf mysql-server_8.0.28-1ubuntu18.04_amd64.deb-bundle.tar

    2. 升级并安装依赖包

    ```shell sudo apt-get upgrade sudo apt-get install libaio1 ```

    3. 按顺序安装deb依赖包

    ```shell sudo dpkg -i mysql-common_8.0.28-1ubuntu18.04_amd64.deb sudo dpkg -i mysql-community-client-plugins_8.0.28-1ubuntu18.04_amd64.deb sudo dpkg -i libmysqlclient21_8.0.28-1ubuntu18.04_amd64.deb sudo dpkg -i libmysqlclient-dev_8.0.28-1ubuntu18.04_amd64.deb sudo dpkg -i mysql-community-client-core_8.0.28-1ubuntu18.04_amd64.deb sudo dpkg -i mysql-community-client_8.0.28-1ubuntu18.04_amd64.deb sudo apt-get install libaio1 libmecab2 openssh-client sudo dpkg -i mysql-community-server-core_8.0.28-1ubuntu18.04_amd64.deb sudo dpkg -i mysql-client_8.0.28-1ubuntu18.04_amd64.deb sudo dpkg -i mysql-community-server_8.0.28-1ubuntu18.04_amd64.deb sudo dpkg -i mysql-server_8.0.28-1ubuntu18.04_amd64.deb ```
    mysql -V

    mysql -u root -p

    create user 'wst' @'%' identified by '123456';

    grant all on *.* to 'wst'@'%';

    create database hadoopDB;
    create database hiveDB;

    SELECT user FROM mysql.user;
    SHOW DATABASES;

    4. 彻底卸载MySQL

    ```shell sudo rm /var/lib/mysql/ -R ```
    sudo rm /etc/mysql/ -R

    sudo apt-get autoremove mysql* –purge
    sudo apt-get remove apparmor

    dpkg –list|grep mysql

    sudo apt-get remove dbconfig-mysql
    sudo apt-get remove mysql-client
    sudo apt-get remove mysql-client-5.7
    sudo apt-get remove mysql-client-core-5.7
    sudo apt-get autoremove mysql* –purge
    sudo apt-get remove php7.0-mysql

    dpkg -l|grep ^rc|awk{print$2}|sudo xargs dpkg -P

    4. 安装与配置Hive

    简介:

    Hive是由Facbook开源的一个解决海量结构化日志的数据统计工具使用SQL语句来读,写,管理基于分布式系统的大型数据的功能,是基于Hadoop的一个数据仓库工具。更多的是作为数据索引工具。

    1. 上传与解压Hive安装包

    ```shell tar -zxvf apache-hive-3.1.2-bin.tar.gz mv apache-hive-3.1.2-bin hive ```

    2. 配置HIve

    ```shell sudo vi hive/conf/hive-site.xml ```
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property>
    <name>hive.metastore.local</name>
    <value>true</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>wst</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://master:3306/hadoopDB?characterEncoding=UTF-8</value>
    <!— 这里自己搓自己的mysql的ip地址 —>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    </property>
    </configuration>

    cd hive/conf/
    cp hive-env.sh.template hive-env.sh
    sudo vi hive-env.sh

    HADOOP_HOME=/home/wst/hadoop-3.3.1

    source hive-env.sh

    sudo vi hive-config.sh

    export JAVA_HOME=/home/wst/JDK/jdk-8u191-linux-x64/jdk1.8.0_191
    export HADOOP_HOME=/home/wst/hadoop-3.3.1
    export HIVE_HOME=/home/wst/hive

    3. 配置环境变量

    ```shell sudo vi /etc/profile ```
    export HIVE_HOME=/home/wst/hive
    export PATH=$PATH:$HIVE_HOME/bin

    source /etc/profile

    4. 复制MySQL的驱动程序

    +
    上传 mysql-connector-java_8.0.28-1ubuntu18.04_all.deb
    mkdir source
    dpkg -X mysql-connector-java_8.0.28-1ubuntu18.04_all.deb source
    cd source/usr/share/java/
    cp mysql-connector-java-8.0.28.jar /home/wst/hive/lib/

    5. 元数据初始化

    ```shell schematool -initSchema -dbType mysql ```

    6. 启动并验证Hive

    ```shell cd /home/wst/hive/ hadoop fs -chmod -R 777 /tmp bin/hive ```

    注意要启动集群

    7. 常用命令

    ```shell hive> create table userinfo( > name string, > age int, > salary bigint > ); ```
    hive> create table userinfo1 as select * from userindo;

    hive> create table userinfo2 like userinfo;

    hive> show databases;

    describe wst;

    hive> insert into userinfo(name,age,salary) values('roy',18,100000);

    hive> select * from userinfo;

    create table text4(
    name string,
    friends array<string>,
    children map<string,int>,
    address struct<street:string,city:string>
    )
    row format delimited fields terminated by ','
    collection items terminated by '_'
    map keys terminated by ':'
    lines terminated by '\\n';

    创建文件text4

    roy,bob_john,yula:6_sophia:17,lugu_changsha
    mike,lea_jacky,rita:7_king:20,chao yang_beijing

    hdfs dfs -put text4 /user/hive/warehouse/text.db/text4

    hive> select name,friends[0],children['yula'],address.street from text4;
    OK
    roy bob 6 lugu
    mike lea NULL chao yang
    Time taken: 0.117 seconds, Fetched: 2 row(s)

    hive> select name,friends[0],children['yula']+1,address.street from text4;
    OK
    roy bob 7 lugu
    mike lea NULL chao yang
    Time taken: 0.114 seconds, Fetched: 2 row(s)

    8. 维护数据库和数据表

    1. 维护数据库
    hive> alter database db_hive set dbproperties('creatime'='20221026');

    hive> desc database extended db_hive;

  • 维护数据表
  • alter table userinfo add columns(sex smallint);

    hive> alter table userinfo rename to userinfo_2;

    hive> alter table userinfo_2 change column sex xingbei smallint;

    hive> desc userinfo_2;

    9. 外部表

    1. 创建外部表
    hive> create external table text.text1(
    > name string,
    > age int,
    > sex string);

    alter table text.text1 set tblproperties('EXTERNAL'='FALSE');

    alter table text.text1 set tblproperties('EXTERNAL'='TRUE');

    10. 分区表(针对存储路径)

    1. 创建分区表
    hive> create table deptinfo(
    > deptno int,
    > dname string,
    > officeroom string)
    > partitioned by (year string)#不能用已有的字段进行分区
    > row format delimited fields terminated by ',';

    在本地创建三个文件 dept_1.txt, dept_2.txt, dept_1.txt

    10,ACCOUNTINT,700
    15,RESEARCH,800
    20,SALES,900
    25,MANAGER,700
    30,DEV,600
    35,TEST,600

    10,ACCOUNTINT,1700
    15,RESEARCH,1800
    20,SALES,1900
    25,MANAGER,1700
    30,DEV,1600
    35,TEST,1600

    10,ACCOUNTINT,2700
    15,RESEARCH,2800
    20,SALES,2900
    25,MANAGER,2700
    30,DEV,2600
    35,TEST,2600

    hive> load data local inpath '/home/wst/dept_1.txt' into table deptinfo partition (year='2021');

    hive> alter table deptinfo add partition(year='2019');

    hive> alter table deptinfo drop partition(year='2018');

    hive> show partitions deptinfo;

    hive> truncate table deptinfo_dep;

    11. 分桶表(针对数据文件)

    1.创建分桶表
    hive> create table stu(
    > id int,
    > name string)
    > clustered by (id)
    > into 4 buckets
    > row format delimited fields terminated by ',';

    hive> insert into stu values (1,'lili');

    hive> select * from stu tablesample (bucket 1 out of 4 on id);

    hive> show create table stu;

    12. hive查询

    ```shell hive> create table if not exists dept(deptno int,dname string,loc int) > row format delimited fields terminated by ','; ```
    hive> create table if not exists emp(
    > empno int,
    > ename string,
    > job string,
    > mgr int,
    > hiredate string,
    > sal double
    > sal double,
    > comm double,
    > deptno int)
    > row format delimited fields terminated by ',';

    10,ACCOUNTING,1700
    20,RESEARCH,1800
    30,SALES,1900
    40,OPERATIONS,1700

    7369,SMITH,CLERK,7902,1980-12-17,800.00,,20
    7944,ALLEN,SALESMAN,7698,1981-2-20,1600.00,300.00,30
    7521,WARD,SALESMAN,7698,1981-2-22,1250.00,500.00,30
    7566,JONES,MANAGER,7839,1981-4-2,2975.00,,20
    7654,,MARTIN,SALESMAN,7698,1981-9-28,1250.00,1400.00,30
    7698,BLAKE,MANAGER,7839,1981-5-1,2850.00,,30
    7782,CLARK,MANAGER,7839,1981-6-9,2450.00,,10
    7788,SCOTT,ANALYST,7566,1987-4-19,3000,00,,20
    7839,KING,PRESIDENT,,1981-11-17,5000.00,,10
    7844,TURNER,SALESMAN,7698,1981-9-8,1500.00,0.00,30
    7876,ADAMS,CLERK,7788,1987-5-23,1100.00,,20
    7900,JAMES,CLERK,7698,1981-12-3,950.00,,30
    7902,FORD,ANALYST,7566,1981-12-3,3000.00,,20
    7934,MILLER,CLERK,7782,1982-1-23,1300.00,,10

    hive> load data local inpath '/home/wst/dept' into table dept;
    hive> load data local inpath '/home/wst/emp' into table emp;

  • select查询
  • hive> select * from dept left join emp on dept.deptno=emp.deptno;

    hive> select count(*) from emp;

    hive> select empno,job from emp limit 10;

    hive> select count(*) from emp where deptno=10;

  • group by 分组查询
  • hive> select deptno, count(*) from emp group by deptno;

    hive> select deptno, count(*) as cnp from emp group by deptno order by cnp desc;

    hive> select deptno, count(*) as cnp from emp group by deptno order by cnp asc;

    hive> select count(a.deptno) from (select deptno,count(*) as cnt from emp group by deptno having cnt>10) a;

    hive> create table emp_10 as select * from emp limit 10;

    12. 连接

    ```shell hive> select s.empno,s1.ename from emp s inner join emp_10 s1 on s.empno=s1.empno; ```
    hive> select s.empno,s.ename,s1.deptno from emp s left outer join emp_10 s1 on s.empno=s1.empno;

    hive> select s.empno,s.ename,s1.deptno from emp s right outer join emp_10 s1 on s.empno=s1.empno;

    5. 安装与配置Sqoop

    简介:

    Sqoop是Apche旗下的一款Hadoop和关系型数据库服务器之间传输数据的工具,既可以将一个关系型数据库(如MySQL,Oracle,Postgres等)中的数据导入Hadoop的HDFS中,也可以将HDFS中的数据导入到关系型数据库中,Sqoop是Hadoop与关系型数据库之间数据传输的桥梁。

    1. 上传与解压安装包

    ```shell tar -xvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz ```

    2. 上传与复制MySQL驱动程序

    ```shell https://search.maven.org/ #下载网站 ```
    cp mysql-connector-java-8.0.14.jar sqoop-1.4.7.bin__hadoop-2.6.0/lib

    3. 配置sqoop-env.sh

    ```shell cd sqoop-1.4.7.bin__hadoop-2.6.0/conf/ cp sqoop-env-template.sh sqoop-env.sh sudo vi sqoop-env.sh ```
    export HADOOP_HOME=/home/wst/hadoop-3.3.1
    export HADOOP_MAPRED_HOME=/home/wst/hadoop-3.3.1

    4. 配置Sqoop的环境变量

    ```shell sudo vi /etc/profile ```
    export SQOOP_HOME=/home/wst/sqoop-1.4.7.bin__hadoop-2.6.0
    export PATH=$PATH:$SQOOP_HOME/bin

    source /etc/profile

    5. 验证Sqoop

    ```shell cd sqoop-1.4.7.bin__hadoop-2.6.0/ bin/sqoop help ```

    6. 检查链接MySQL

    ```shell bin/sqoop list-databases –connect jdbc:mysql://localhost:3306/ -username root -password 123456 ```

    6. zookeeper集群搭建

    简介:

    ZooKeeper是Hadoop中非常重要的组件,它的主要功能是为分布式系统提供一致性协调服务,包括配置,维护,域名服务,分布式服务和组服务等。

    1. 解压安装包(在master上)

    ```shell tar -xzvf zookeeper-3.5.4-beta.tar.gz ```
    mv zookeeper-3.5.4-beta.tar.gz zookeeper

    2. 修改zookeeper配置文件

    +
    进入zookeeper安装目录的conf
    cp zoo_sample.cfg zoo.cfg
    sudo vi zoo.cfg

    dataDir=/home/wst/zookeeper/zookeeper
    server.1=master:2888:3888
    server.2=slave1:2888:3888
    server.3=slave2:2888:3888

    注:需要注释掉原来的dataDir路径

    mkdir -p /home/wst/zookeeper/zookeeper/

    3. 复制zookeeper安装文件

    ```shell scp -r zookeeper slave1:~/ scp -r zookeeper slave2:~/ ```

    4. 创建ServerID文件,三台机子上分别执行

    ```shell sudo vi /home/wst/zookeeper/zookeeper/myid ```

    • 分别填入1,2,3

    5. 启动zookeeper集群

    +
    进入zookeeper安装目录,依次启动master,slave1,slave2
    bin/zkServer.sh start
    bin/zkServer.sh stop

    bin/zkServer.sh status

    6. 选举机制

    第一次选举

    (1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING; (2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1) 大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING; (3)服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING; (4)服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为 1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING; (5)服务器5启动,同4一样当小弟。

    非第一次选举

    SID:服务器ID。 ZXID:事务ID。 Epoch:每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加

    选举Leader规则: ①EPOCH大的直接胜出 ②EPOCH相同,ZXID大的胜出 ③ZXID相同,SID大的胜出

    7. Hbase集群搭建

    简介:

    Hbase是Hadoop的数据库,能够对大型数据提供随机,实时的读写访问,Hbase的目标是储存并处理大型的数据,更具体的说是仅有普通的硬件配置处理由成千上万的行和列所组成的大型数据库。

    1. 解压并安装Hbase

    ```shell tar -xzvf hbase-2.4.11-bin.tar.gz ```
    mv hbase-2.4.11/ hbase

    2. 配置Hbase

    +
    进入hbase安装目录的conf子目录
    sudo vi hbase-env.sh

    export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
    export JAVA_HOME=/home/wst/JDK/jdk-8u191-linux-x64/jdk1.8.0_191
    export HBASE_CLASSPATH=/home/wst/hadoop-3.3.1
    export HBASE_MANAGES_ZK=false

    sudo vi hbase-site.xml

    <configuration>
    <!— 指定hbase在HDFS上存储的路径 —>
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:8020/hbase</value>
    </property>
    <!— 指定hbase是分布式的 —>
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <!— 指定zk的地址,多个用“,”分割 —>
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master,slave1,slave2</value>
    </property>
    <!— 时间服务器不同步导致集群服务无法启动
    目前regionserver节点的时间和master的时间差距大于30000ms,就是30秒时无法启动
    服务 —>
    <property>
    <name>hbase.coprocessor.abortonerror</name>
    <value>false</value>
    </property>
    <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
    </property>
    <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/wst/zookeeper/zookeeper</value>
    </property>
    <property>
    <name>hbase.master.info.port</name>
    <value>60010</value>
    </property>
    </configuration>

    sudo vi regionservers

    slave1
    slave2

    3. 配置hbase环境变量

    ```shell sudo vi /etc/profile ```
    export HBASE_HOME=/home/wst/hbase
    export PATH=$PATH:${HBASE_HOME}/bin

    source /etc/profile

    4. 复制Hbase安装文件

    ```shell scp -r hbase/ slave1:~/ scp -r hbase/ slave2:~/ ```

    5. 启动Hbase集群

    ```shell hbase/hbase-2.5.0/bin/start-hbase.sh hbase/hbase-2.5.0/bin/stop-hbase.sh ```

    6. Wed查看

    ```shell master:60010 ```

    8. 安装与配置Scala

    简介:

    Scala是一门多范式的编程语言,一种类似java的编程语言 ,设计初衷是实现可伸缩的语言 、多范式既即面向对象也是函数式编程。
    面向对象:万物皆对象 封装 实例对象 类 继承 。
    函数式编程: 面向过程 函数当成编程。

    1. 下载Scala

    ```shell https://scala-lang.org/download/2.12.8.html ```

    2. 安装Scala

    ```shell tar -zxvf scala-2.12.8.tgz ```

    3. 启动Scala

    ```shell cd scala-2.12.8/ bin/scala ```

    4. 应用Scala

    ```shell println("The secret of success is constancy to purpose") ```

    5. 退出Scala

    ```shell :q ```

    9. 安装与配置Spark

    简介:

    Hadoop 是一种开源框架,它将 Hadoop 分布式文件系统 (HDFS) 用于存储,将 YARN 作为管理由不同应用程序所使用的计算资源的方式,并且实现 MapReduce 编程模型来充当执行引擎。在一般 Hadoop 实现中,还会部署不同的执行引擎,如 Spark、Tez 和 Presto。

    Spark 是一种专门用于交互式查询、机器学习和实时工作负载的开源框架。它没有自己的存储系统,但会在其他存储系统,如 HDFS,或其他热门存储,如 Amazon Redshift、Amazon S3、Couchbase、Cassandra 等之上运行分析。Hadoop 上的 Spark 会利用 YARN 来分享常见的集群和数据集作为其他 Hadoop 引擎,确保服务和响应的一致性水平。

    1. 下载并安装Spark

    ```shell http://archive.apache.org/dist/spark/spark-3.0.1/ ```
    tar -xzvf spark-3.0.1-bin-hadoop2.7.tgz

    2. 配置Spark环境变量

    ```shell cd spark-3.0.1-bin-hadoop2.7/conf/ cp spark-env.sh.template spark-env.sh sudo vi spark-env.sh ```
    export SPARK_MASTER_IP=192.168.200.8#marst的IP地址
    export JAVA_HOME=/home/wst/JDK/jdk-8u191-linux-x64/jdk1.8.0_191
    export HADOOP_HOME=/home/wst/hadoop-3.3.1
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export SCALA_HOME=/home/wst/scala-2.12.8

    cp slaves.template slaves
    sudo vi slaves

    slave1
    slave2

    3. 将配置好的Spark安装文件复制到slave节点

    ```shell scp -r /home/wst/spark-3.0.1-bin-hadoop2.7 slave1:~/ scp -r /home/wst/spark-3.0.1-bin-hadoop2.7 slave2:~/ ```

    4. 启动并验证Spark

    ```shell cd spark-3.0.1-bin-hadoop2.7/ sbin/start-all.sh sbin/stop-all.sh ```

    5. 运行Spark程序

    ```shell ./bin/spark-submit –class org.apache.spark.examples.SparkPi –master local –num-executors 3 –executor-memory 512m –executor-cores 1 examples/jars/spark-examples_2.12-3.0.1.jar ```

    10. Flink集群搭建

    简介:

    Flink是一个批处理和流处理结合的统一计算框架,其核心是一个提供了数据分发以及并行化计算的流数据处理引擎。. 它的最大亮点是流处理,是业界最顶级的开源流处理引擎。. Flink最适合的应用场景是低时延的数据处理(Data Processing)场景:高并发pipeline处理数据,时延毫秒级,且兼具可靠性。

    1. Flink支持多种搭建方式

    1.
    local( 本地) ——单机模式, 一般不使用 2.
    standalone ——独立模式, Flink 自带集群,开发测试环境使用 3.
    yarn——计算资源统一由 Hadoop YARN 管理,生产环境测试

    2. standalone模式环境搭建

    1.
    将下载好的Flink安装包上传到指定目录 2.
    解压Flink
    wst@master:~$ tar -zxvf flink-1.7.2-bin-hadoop28-scala_2.12.tgz
    wst@master:~$ mv flink-1.15.3/ flink

  • 修改安装目录下 conf 文件夹内的 flink-conf.yaml 配置文件, 指定 JobManager (指定管理者)
  • wst@master:~$ vi flink/conf/flink-conf.yaml
    # 配置 Master 的机器名( IP 地址) master = 192.168.200.8
    jobmanager.rpc.address: master
    # 配置每个 taskmanager 生成的临时文件夹
    taskmanager.tmp.dirs: /home/wst/flink/tmp

  • 修改安装目录下 conf 文件夹内的 workers 配置文件, 指定 TaskManager(指定工作节点)
  • wst@master:~$ vi flink/conf/workers
    master
    slave1
    slave2

  • 修改安装目录下 conf 文件夹内的 masters 配置文件, 指定 StandaloneSessionClusterEntrypoint
  • wst@master:~$ vi flink/conf/masters
    master:8081

  • 将配置好的 Flink 目录分发给其他的两台节点
  • wst@master:~$ scp -r flink/ slave1:~/
    wst@master:~$ scp -r flink/ slave2:~/

  • 启动 Flink 集群
  • wst@master:~$ cd flink/
    wst@master:~/flink$ bin/start-cluster.sh

  • 通过 jps 查看进程信息
  • wst@master:~/flink$ jps
    4113 QuorumPeerMain
    5784 StandaloneSessionClusterEntrypoint
    3448 SecondaryNameNode
    6250 Jps
    3675 ResourceManager
    6109 TaskManagerRunner
    3165 NameNode

    wst@slave1:~$ jps
    4961 Jps
    4873 TaskManagerRunner
    3277 QuorumPeerMain
    2479 DataNode
    2639 NodeManager

    wst@slave2:~$ jps
    4449 Jps
    4357 TaskManagerRunner
    3272 QuorumPeerMain
    2463 DataNode
    2623 NodeManager

  • 通过Flink自带的webUI来查看
  • master:8081

    3. 使用Flink来计算个任务进行测试

    1. 启动HDFS集群
    wst@master:~$ start-all.sh

  • 在 HDFS 中创建/test/input 目录
  • wst@master:~$ hdfs dfs -mkdir -p /test/input

  • 上传 wordcount.txt 文件到 HDFS /test/input 目录
  • wst@master:~$ hdfs dfs -put wordcount.txt /test/input

  • 提交任务进行计算
  • wst@master:~/flink$ ./bin/flink run /home/wst/flink/examples/batch/WordCount.jar –input hdfs://master:8020/test/input/wordcount.txt –output hdfs://master:8020/test/output

    flink-shaded-hadoop-2-uber-2.4.1-10.0.jar包放入lib目录后,需要重启flink进程再次运行job任务就可以运行成功了

  • 通过Flink的webUI来查看(有一个任务已经跑成功)
  • 11. kafka集群搭建

    简介:

    Kafka是一种**
    高吞吐量的 分布式 发布订阅消息系统**
    ,它可以处理消费者在网站中的所有动作流数据。

    1. 下载并解压安装包

    ```plain wget https://archive.apache.org/dist/kafka/2.6.0/kafka_2.13-2.6.0.tgz wst@master:~$ tar -xzvf kafka_2.13-2.6.0.tgz wst@master:~$ mv kafka_2.13-2.6.0/ kafka/ ```

    2. 编辑环境变量(三台)

    ```plain wst@master:~$ sudo vi /etc/profile export KAFKA_HOME=/home/wst/kafka export PATH=$PATH:$KAFKA_HOME/bin # 刷新 source /etc/profile ```

    3. 配置 kafka

    ```plain wst@master:~$ sudo vi kafka/config/server.properties broker.id=0 # 修改为每台唯一 delete.topic.enable=true zookeeper.connect=master:2181,slave1:2181,slave2:2181/kafka ```

    4. 分发集群

    ```plain wst@master:~$ scp -r kafka/ slave1:~/ wst@master:~$ scp -r kafka/ slave2:~/ ```

    5. 修改从机上的id

    ```plain wst@slave1:~$ vi kafka/config/server.properties broker.id=1 wst@slave2:~$ vi kafka/config/server.properties broker.id=2 ```

    6. 启动集群

    ```plain wst@master:~$ kafka-server-start.sh -daemon kafka/config/server.properties wst@slave1:~$ kafka-server-start.sh -daemon kafka/config/server.properties wst@slave2:~$ kafka-server-start.sh -daemon kafka/config/server.properties ```

    7. 命令

    1. 查看topic列表
    kafka-topics.sh –zookeeper master/kafka –list

  • 查看topic详情
  • kafka-topics.sh –zookeeper master/kafka –describe –topic topic_log

  • 创建topic
  • kafka-topics.sh –zookeeper master,slave1,slave2/kafka –create –replication-factor 1 –partitions 1 –topic topic_log

  • 删除topic
  • kafka-topics.sh –zookeeper master,slave1,slave2/kafka –delete –topic topic_log

  • 查看历史消息
  • kafka-console-consumer.sh –bootstrap-server master:9092 –from-beginning –topic topic_log

  • 压测
  • kafka-producer-perf-test.sh –topic test –record-size 100 –num-records 10000000 –throughput -1 –producer-props bootstrap.servers=hadoop-master:9092,hadoop-slave1:9092,hadoop-slave2:9092

    kafka-consumer-perf-test.sh –topic test –fetch-size 10000 –messages 10000000 –threads 1 –broker-list master:9092,slave1:9092,slave2:9092

    12. 搭建python的开发环境

    1. 安装python

    ```shell tar -xzvf Python-3.6.4.tgz cd Python-3.6.4/ sudo ./configure ```

    2. 安装C编译器

    ```shell sudo apt-get update sudo apt-get install gcc sudo ./configure ```

    3. 检测python是否安装成功

    ```shell cd Python-3.6.4/ python3 ```
    print("人生苦短,我学python")
    exit()#退出

    13. 补充shell编程

    ```python sudo vi /bin/xcall.sh ```
    #!/bin/bash
    for node in master slave1 slave2
    do
    echo —- $node —-
    ssh $node "source /etc/profile; $*"
    done

    sh /bin/xcall.sh 命令

    赞(0)
    未经允许不得转载:171主机测评 » Hadoop 大数据集群
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址