本環境搭建是在,可參考
華爲雲——數字中國創新大賽·鯤鵬賽道·天府賽區暨四川鯤鵬應用開發者大賽
1 環境搭建準備
本文詳細描述了在華爲雲鯤鵬生態下的 BigData Pro 解決方案實驗手段, 涵蓋集羣搭建
及驗證, 本指導手冊所涉及的大數據組件版本如下所示
組件 | 版本 |
---|---|
Hadoop | 2.8.3 |
Spark | 2.3.0 |
Hive | 2.3.3 |
Hbase | 2.1.0 |
各節點主機名
內網IP | 主機名 |
---|---|
192.168.1.122 | node1 |
192.168.1.27 | node2 |
192.168.1.133 | node3 |
192.168.1.101 | node4 |
1.1修改完畢後,效果如下(以node1爲例):
1.2增加 ip 及節點的映射關係,且確保 ip 爲內網 ip
vi /etc/hosts
修改完畢後,效果如下(以node1爲例):
1.3關閉各節點防火牆
systemctl stop firewalld
systemctl disable firewalld
1.4節點之間建立互信
ssh-keygen -t rsa
ssh-copy-id root@node1
ssh-copy-id root@node2
ssh-copy-id root@node3
ssh-copy-id root@node4
驗證是否互連(以node1爲例)
1.5將數據盤掛載到/home 目錄
1、各節點均需要執行如下命令,對一臺節點掛載目錄的手段如下:
fdisk /dev/vdb
2、輸入 n 後連續回車到 Command (m for help):命令行, 輸入 w自動退出命令行
partprobe
mkfs -t ext4 /dev/vdb1
3、將/dve/vdb1掛載到/home目錄
mount /dev/vdb1 /home
4、查看/home/目錄已經掛載成功
df -h
5、查看/dev/vdb1 的 UUID
blkid
6、設置開機自動掛載,執行 vi /etc/fstab 後, 按照步驟 6 查詢到的 UUID, 添加
UUID=查詢到的 UUID /home ext4 defaults 1 1
1.6同步服務器時間
因爲我們使用的是華爲雲容器引擎,鯤鵬集羣時間已經同步
下面是檢查過程,通過Xshell工具,同時輸入命令date,各節點結果一致
1.7創建必要目錄
各節點執行如下命令
mkdir -p /home/modules/data/buf/
mkdir -p /home/test_tools/
mkdir -p /home/nm/localdir
1.8下載軟件包
1、在node1節點,進入/home目錄下載軟件包至/home目錄,然後進行解壓(下載鏈接僅本次實驗時間內有效)
wget https://big-data-pro-test.obs.cn-east-3.myhuaweicloud.com/arm_bigdata_suite.tar.gz
2、進入/home/arm_bigdata_suite 中使 用 如 下 命 令 下 載 CentOS-7-aarch64-Everything-1908.iso 軟 件 包(下載鏈接僅本次實驗時間內有效)
wget http://mirrors.huaweicloud.com/centos-altarch/7.7.1908/isos/aarch64/CentOS-7-aarch64-Everything-1908.iso
軟件列表如下圖
1.9安裝 openjdk
1、解壓openjdk至 /usr/lib/jvm/目錄
tar zxvf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz -C /usr/lib/jvm
2、修改環境變量vim /etc/profile ,添加JDK路徑
export JAVA_HOME=/usr/lib/jvm/jdk8u191-b12
3、同步至各節點並使其生效驗證
scp -r /usr/lib/jvm/jdk8u191-b12/ 主機名:/usr/lib/jvm
source /etc/profile
java -version
1.10配置 yum 源
1、在 node1, 執行如下命令後,執行 df -h 確認/media 目錄已經成功掛載
mount -o loop /home/arm_bigdata_suite/CentOS-7-aarch64-Everything-1908.iso/media/
df -h
2、在node1, 執行
mv /etc/yum.repos.d/* /tmp/
3、在node1, 執行 vi /etc/yum.repos.d/local.repo 將如下內容保存到本文件中
[local]
name=local
baseurl=file:///media
enabled=1
gpgcheck=0
4、在node1, 執行如下命令
yum clean all
yum makecache
yum list | grep libaio
yum list |grep mysql-connector-java
顯示如下,則代表 yum 源配置完畢
1.11準備 OBS 桶及訪問信息
本次搭建過程中需要使用到如下資源, 需提前準備好
資源名稱 | 備註 |
---|---|
確認所使用的華爲雲區域 | 選擇具備鯤鵬彈性雲服務器的任一區域, 後續創建並行文件系統及創建鯤鵬 ECS 虛擬機需在同一區域進行。 |
並行文件系統 | 1、創建方式:登陸華爲雲, 在上述,選擇對象存儲服務,點擊並行文件系統,點擊創建並行文件系統2、 創建後記錄文件系統名稱(本文後續也稱爲:桶名),爲避免相互影響,每套大數據集羣建議對接不同的 OBS 桶。 |
訪問密鑰(AK 和 SK) | 獲取後備用。 |
OBS 區域域名 | 上述桶所在區域的 OBS 的區域域名 |
2 Hadoop 集羣部署
2.1在 node1 上準備 hadoop 組件
1、在 node1 節點上執行如下命令, 解壓 hadoop 軟件包
cp /home/arm_bigdata_suite/hadoop-2.8.3.tar.gz /home/modules/
cd /home/modules/
tar zxvf hadoop-2.8.3.tar.gz
執行完畢後,可查看到如下目錄:
2、進入hadoop配置目錄
cd /home/modules/hadoop-2.8.3/etc/hadoop
3、配置hadoop-env.sh
將export JAVA_HOME=${JAVA_HOME}替換爲:
export JAVA_HOME=/usr/lib/jvm/jdk8u191-b12
4、配置core-site.xml
fs.obs.access.key、 fs.obs.secret.key、 fs.obs.endpoint 需根據obs桶進行修改
<configuration>
<property>
<name>fs.obs.readahead.inputstream.enabled</name>
<value>true</value>
</property>
<property>
<name>fs.obs.buffer.max.range</name>
<value>6291456</value>
</property>
<property>
<name>fs.obs.buffer.part.size</name>
<value>2097152</value>
</property>
<property>
<name>fs.obs.threads.read.core</name>
<value>500</value>
</property>
<property>
<name>fs.obs.threads.read.max</name>
<value>1000</value>
</property>
<property>
<name>fs.obs.write.buffer.size</name>
<value>8192</value>
</property>
<property>
<name>fs.obs.read.buffer.size</name>
<value>8192</value>
</property>
<property>
<name>fs.obs.connection.maximum</name>
<value>1000</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/modules/hadoop-2.8.3/tmp</value>
</property>
<property>
<name>fs.obs.access.key</name>
<value>RSM2WMT03R38ZLY2TCOL</value>
</property>
<property>
<name>fs.obs.secret.key</name>
<value>KaP5ajgg8FGvRP6Sy2QX7UUO4sXFFisuPoCuseB8</value>
</property>
<property>
<name>fs.obs.endpoint</name>
<value>obs.cn-north-4.myhuaweicloud.com:5080</value>
</property>
<property>
<name>fs.obs.buffer.dir</name>
<value>/home/modules/data/buf</value>
</property>
<property>
<name>fs.obs.impl</name>
<value>org.apache.hadoop.fs.obs.OBSFileSystem</value>
</property>
<property>
<name>fs.obs.connection.ssl.enabled</name>
<value>false</value>
</property>
<property>
<name>fs.obs.fast.upload</name>
<value>true</value>
</property>
<property>
<name>fs.obs.socket.send.buffer</name>
<value>65536</value>
</property>
<property>
<name>fs.obs.socket.recv.buffer</name>
<value>65536</value>
</property>
<property>
<name>fs.obs.max.total.tasks</name>
<value>20</value>
</property>
<property>
<name>fs.obs.threads.max</name>
<value>20</value>
</property>
</configuration>
5、配置hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node1:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>node1:50091</value>
</property>
</configuration>
6、配置mapred-site.xml # 需要cp mapred-site.xml.template mapred-site.xml模板
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property><property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
<property>
<name>mapred.task.timeout</name>
<value>1800000</value>
</property>
</configuration>
7、配置yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/nm/localdir</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>28672</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>3072</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>28672</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>38</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>38</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property><property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
<description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
<description>Ratio between virtual memory to physical memory when setting memory
limits for containers</description>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
</property>
</configuration>
8、在slaves中指定 datanode節點
9、在 node1 節點, 替換 snappy-java-1.0.4.1.jar 文件
cd /home/arm_bigdata_suite/
echo y | cp snappy-java-1.0.4.1.jar /home/modules/hadoop-2.8.3/share/hadoop/kms/tomcat/webapps/kms/WEB-INF/lib/
echo y | cp snappy-java-1.0.4.1.jar /home/modules/hadoop-2.8.3/share/hadoop/tools/lib/
echo y | cp snappy-java-1.0.4.1.jar /home/modules/hadoop-2.8.3/share/hadoop/mapreduce/lib/
echo y | cp snappy-java-1.0.4.1.jar /home/modules/hadoop-2.8.3/share/hadoop/common/lib/
echo y | cp snappy-java-1.0.4.1.jar /home/modules/hadoop-2.8.3/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/
10、在 node1 節點, 執行如下命令將 OBA-HDFS 的插件 jar 包, 添加到對應的目錄中
cp /home/arm_bigdata_suite/hadoop-huaweicloud-2.8.3.36.jar /home/modules/hadoop-
2.8.3/share/hadoop/common/lib/
cp /home/arm_bigdata_suite/hadoop-huaweicloud-2.8.3.36.jar /home/modules/hadoop-
2.8.3/share/hadoop/tools/lib
cp /home/arm_bigdata_suite/hadoop-huaweicloud-2.8.3.36.jar /home/modules/hadoop-
2.8.3/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib/
cp /home/arm_bigdata_suite/hadoop-huaweicloud-2.8.3.36.jar /home/modules/hadoop-
2.8.3/share/hadoop/hdfs/lib/
2.2分發組件到各個節點並啓動 dfs
1、在node1 執行如下命令, 將 hadoop-2.8.3 目錄拷貝到其他各個節點的/home/modules/
for i in {2..4};do scp -r /home/modules/hadoop-2.8.3 root@node${i}:/home/modules/;done
2、在各節點,執行 vi /etc/profile 添加如下環境變量
export HADOOP_HOME=/home/modules/hadoop-2.8.3
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CLASSPATH=/home/modules/hadoop-2.8.3/share/hadoop/tools/lib/*:$HADOOP_CLASSPATH
3、在各節點執行如下命令, 使環境變量生效
source /etc/profile
4、在 node1~node4,初始化 namenode
hdfs namenode -format
5、在 node1 節點, 執行如下命令啓動 dfs 和 yarn
start-dfs.sh
start-yarn.sh
6、在 node1 執行 jps 命令, 可以查看到 NameNode, SecondaryNameNode, ResourceManager進程。
7、在 node2~node4 執行 jps 命令, 可以查看到 NodeManager 和 Datanode 進程。
2.1.2驗證 hadoop 的基本功能
1、登陸網址 http://node1 彈性 ip:8088/cluster,頁面可正常打開
2、 執行如下命令創建目錄並查看目錄
hadoop dfs -mkdir /test_folder
hadoop dfs -ls /
3、 在 node1, 執行如下命令查看 obs 桶中的目錄
hdfs dfs -ls obs://[桶名]/
3 Spark 分佈式集羣部署
3.1在 node1 準備 spark 組件
1、 在 node1 節點上執行如下命令, 解壓 hive 軟件包,並重命名文件夾
tar zxvf /home/arm_bigdata_suite/spark-2.3.0-bin-dev-with-sparkr.tgz -C /home/modules/
cd /home/modules/
mv spark-2.3.0-bin-dev spark-2.3.0
執行完畢後,可查看到如下目錄:
2、 在 node1 節點,執行如下命令將 hadoop-huaweicloud-2.8.3.36.jar 包拷貝到 jars 目錄
cp /home/arm_bigdata_suite/hadoop-huaweicloud-2.8.3.36.jar /home/modules/spark-
2.3.0/jars/
3、 在 node1 節點, 替換 snappy-java-1.0.4.1.jar 文件
cd /home/arm_bigdata_suite/
echo y | cp snappy-java-1.0.4.1.jar /home/modules/spark-2.3.0/jars/
4、 在 node1 節點上, vi /home/modules/spark-2.3.0/conf/spark-env.sh 補充如下配置項
export SCALA_HOME=/home/modules/spark-2.3.0/examples/src/main/scala
export SPARK_HOME=/home/modules/spark-2.3.0
export SPARK_DIST_CLASSPATH=$(/home/modules/hadoop-2.8.3/bin/hadoop classpath)
3.2 分發組件到各個節點
1、在node1 執行如下命令將 spark-2.3.0目錄拷貝到其他各個節點的/home/modules/下
for i in {2..4};do scp -r /home/modules/spark-2.3.0 root@node${i}:/home/modules/;done
拷貝完畢後,在 node2~node4 節點, 均可出現如下目錄:
2、 在 node1~node4 節點上, vi /etc/profile 添加如下環境變量:
export SPARK_HOME=/home/modules/spark-2.3.0
export PATH=${SPARK_HOME}/bin:${SPARK_HOME}/sbin:$PATH
3、在 node1~node4 節點上,執行如下命令使得環境變量生效
source /etc/profile
3.3驗證 spark 的基本功能
1、 通過 spark-sql 驗證基本功能,在 node1 上執行 spark-sql 命令, 進入到命令行後,執行如,可在端口4040查看任務下操作
show databases;
create database testdb;
show databases;
use testdb;
create table testtable(value INT);
desc testtable;
insert into testtable values (1000);
select * from testtable;
exit;
4 Hive 部署在 node1 上準備 hive 組件
4.1在 node1 上安裝 mysql
1、添加 mysql 用戶組和 mysql 用戶,用於隔離 mysql 進程
groupadd -r mysql && useradd -r -g mysql -s /sbin/nologin -M mysql
2、安裝依賴庫 libaio.aarch64 以及 libaio-devel.aarch64
yum install -y libaio*
3、解壓 mysql 安裝包並重命名
tar xvf /home/arm_bigdata_suite/mysql-5.7.27-aarch64.tar.gz -C /usr/local/
mv /usr/local/mysql-5.7.27-aarch64 /usr/local/mysql
4、配置 mysql
mkdir -p /usr/local/mysql/logs
chown -R mysql:mysql /usr/local/mysql
ln -sf /usr/local/mysql/my.cnf /etc/my.cnf
cp -rf /usr/local/mysql/extra/lib* /usr/lib64/
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.old
ln -s /usr/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6
5、設置開機啓動
cp -rf /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
systemctl enable mysqld
6、添加環境變量, 執行 vi /etc/profile 後, 添加
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
7、確保環境變量生效
source /etc/profile
8、初始化 mysql
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
systemctl start mysqld
systemctl status mysqld
9、修改數據庫 root 密碼, 執行 mysql_secure_installation 後按照如下操作進行
[root@node1 ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):<–初次運行直接回車
OK, successfully used password, moving on…Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] #是否設置 root 用戶密碼, 輸入 y 並回車
New password: #設置 root 用戶的密碼,輸入 Hadoop@2020 後回車
Re-enter new password: #再輸入 Hadoop@2020 後回車
Password updated successfully!
Reloading privilege tables..
… Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] #是否刪除匿名用戶,輸入 Y 並回車
… Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] #是否禁止 root 遠程登錄,輸入 n 並回車
… Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] #是否刪除 test 數據庫,直接回車
- Dropping test database…
… Success!
- Removing privileges on test database…
… Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] #是否重新加載權限表, 直接回車
… Success!
Cleaning up…
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
[root@node1~]#
10、重啓 mysql 並查看 mysql 狀態
systemctl restart mysql
systemctl status mysql
4.2 mysql連接
1、允許遠程連接 mysql
mysql -u root -p
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;mysql>flush privileges;
2、 在 node1 上,安裝 mysql-connector-java
yum -y install mysql-connector-java
3、 在 node1 節點上執行如下命令, 解壓 hive 軟件包,並重命名文件夾
cp /home/arm_bigdata_suite/apache-hive-2.3.3-bin.tar.gz /home/modules/
cd /home/modules/
tar zxvf apache-hive-2.3.3-bin.tar.gz
mv apache-hive-2.3.3-bin hive-2.3.3
執行完畢後,可查看到如下目錄:
4、在 node1 節點上, 將 mysql-connect-java.jar 拷貝到 hive 相關目錄下
cp /usr/share/java/mysql-connector-java.jar /home/modules/hive-2.3.3/lib/
5、在 node1 節點上,執行 vi /home/modules/hive-2.3.3/conf/hive-site.xml 後, 拷貝如下內
容到本文本中後, 保存退出。
【特別注意】此配置文件中的 javax.jdo.option.ConnectionPassword 的值需要和 mysql 的密碼保持一致
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive_metadata?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>Hadoop@2020</value>
</property>
<property>
<name>hive.strict.checks.cartesian.product</name>
<value>false</value>
</property>
</configuration>
6、 在 node1 節點上, vi /home/modules/hive-2.3.3/conf/hive-env.sh 中增加 HADOOP_HOME路徑
HADOOP_HOME=/home/modules/hadoop-2.8.3
7、執行初始化 mysql 數據庫操作,顯示“schemaTool completed”則表示執行成功
cd /home/modules/hive-2.3.3/bin
./schematool -initSchema -dbType mysql
4.3分發組件到各節點並設置環境變量
1、在 node1 執行如下命令, 將 hive 目錄拷貝到其他各個節點的/home/modules/下
for i in {2..4};do scp -r /home/modules/hive-2.3.3 root@node${i}:/home/modules/;done
拷貝完畢後,在 node2~node4 節點, 均可出現如下目錄:
2、在 node1~node4 上的/etc/profile 文件中, 補充如下的內容
export HIVE_HOME=/home/modules/hive-2.3.3
export PATH=${HIVE_HOME}/bin:$PATH
3、在 node1~node4 節點執行如下命令確保環境變量生效
source /etc/profile
4.4驗證 hive 基本功能
1、在 node1 上執行 hive 命令, 進入到命令行後,執行如下操作:
show databases;
create database testdb;
show databases;
use testdb;
create table testtable(value INT);
desc testtable;
insert into testtable values (1000);
select * from testtable;
exit;
2、在 node1 上執行 hive 命令
進入到命令行後,執行如下操作, 通過 on OBS 的方式訪問 hive 數據(需提前將 bucket_name 替換爲真實使用的 OBS 桶名), 驗證存算分離
基本能力:
use testdb;
create table testtable_obs(a int, b string) row format delimited fields terminated by ","
stored as textfile location "obs://bucket_name/testtable_obs";
insert into testtable_obs values (1,'test');
select * from testtable_obs;
exit;
3、執行 hadoop fs -ls obs://bucket_name/testtable_obs 命令, 可以查看到具體的數據文件已存儲在 OBS 桶中。
5 HBase 部署
5.1在 node1 上準備 hbase 組件
1、 在 node1 節點上執行如下命令, 解壓 hbase 軟件包至/home/modules 路徑下
tar zxvf /home/arm_bigdata_suite/hbase-2.1.0-bin.tar.gz -C /home/modules/
執行完畢後,可查看到如下目錄:
2、 在 node1 節點, vi /home/modules/hbase-2.1.0/conf/hbase-env.sh 在最後補充
export JAVA_HOME=/usr/lib/jvm/jdk8u191-b12
3、在 node1 節點
vi /home/modules/hbase-2.1.0/conf/hbase-site.xml 將和中的內容替換爲如下:
【特別說明】本配置文件中的 hbase.rootdir 參數中 bucket_name 需要替換爲實際用到的
桶名。
<configuration>
<property>
<name>hbase.regionserver.handler.count</name>
<value>1000</value>
</property>
<property>
<name>hbase.client.write.buffer</name>
<value>5242880</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>obs://bucket_name/hbasetest</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<property>
<name>hbase.zookeeper.property.tickTime</name>
<value>6000</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/modules/hbase-2.1.0/data/zookeeper</value>
</property>
<property>
<name>hbase.cluster.distributed</name><value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1,node2,node3</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/modules/hbase-2.1.0/tmp</value>
</property>
<property>
<name>hbase.wal.provider</name>
<value>org.apache.hadoop.hbase.wal.FSHLogProvider</value>
</property>
<property>
<name>hbase.wal.dir</name>
<value>hdfs://node1:8020/hbase</value>
</property>
<property>
<name>hbase.client.write.buffer</name>
<value>2097152</value>
</property>
<property>
<name>hbase.regionserver.handler.count</name>
<value>200</value>
</property>
<property>
<name>hbase.hstore.compaction.min</name>
<value>6</value>
</property>
<property>
<name>hbase.hregion.memstore.block.multiplier</name>
<value>16</value>
</property>
<property>
<name>hfile.block.cache.size</name>
<value>0.2</value>
</property>
<property>
<name>hbase.master.maxclockskew</name>
<value>150000</value>
</property>
</configuration>
4、在 node1 節點, 配置 regionserver執行 vi/home/modules/hbase-2.1.0/conf/regionservers確保內容如下
node1
node2
node3
node4
5、node1 上執行如下命令:
cp /home/modules/hadoop-2.8.3/etc/hadoop/core-site.xml /home/modules/hbase-2.1.0/conf/
6、node1 上執行如下命令, 將 hbase 中的 hadoop-common-2.8.3.jar 組件包替換成 hadoop中的 jar 包,並通過 md5sum 命令校驗兩個 jar 文件的 MD5 值一致。
echo y | cp /home/modules/hadoop-2.8.3/share/hadoop/common/hadoop-common-
2.8.3.jar /home/modules/hbase-2.1.0/lib/
md5sum /home/modules/hbase-2.1.0/lib/hadoop-common-2.8.3.jar
md5sum /home/modules/hadoop-2.8.3/share/hadoop/common/hadoop-common-
2.8.3.jar
7、node1 上執行如下命令, 將 hadoop-huaweicloud-2.8.3.36.jar 添加至 hbase 的 lib 目錄中:
cp /home/arm_bigdata_suite/hadoop-huaweicloud-2.8.3.36.jar /home/modules/hbase-
2.1.0/lib/
8、node1 上配置 vi /home/modules/hbase-2.1.0/bin/hbase-daemon.sh,在 172 行增加如下的配置
export SERVER_GC_OPTS="-Xms20480M -Xmx20480M -XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -XX:MaxDirectMemorySize=2048M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=65 -XX:+PrintGCDetails -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFE -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFE -XX:-OmitStackTraceInFastThrow -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M"
配置後, 截圖如下:
5.2分發組件到各個節點並啓動 hbase
1、在 node1 執行如下命令, 將 hbase 目錄拷貝到其他各個節點的/home/modules/下
拷貝完畢後,在 node2~node4 節點, 均可出現如下目錄:
for i in {2..4};do scp -r /home/modules/hbase-2.1.0 root@node${i}:/home/modules/;done
2、在 node1~node4 上的/etc/profile 文件中, 補充如下的內容
export HBASE_HOME=/home/modules/hbase-2.1.0
export PATH=${HBASE_HOME}/bin:$PATH
3、在 node1~node4 節點執行如下命令確保環境變量生效
source /etc/profile
4、在 node1 節點, 執行如下命令啓動 hbase
start-hbase.sh
5.3驗證 hbase 基本功能
1、在 node1 節點執行 jps 命令, 查看存在 HMaster、 HRegionServer、 HQuorumPeer
2、 使用 node1 的彈性 ip 地址, 登陸 Hbase 首頁網址,能夠正常打開:
http://node1彈性 ip:16010/master-status
3、在 node1 上, 執行 hbase shell 命令後, 執行如下命令可正常執行
create 't', 'f'
put 't', 'rold', 'f', 'v'
scan 't'
describe 't'
disable 't'
drop 't'
exit
6 Hibench
6.1工具準備
1、 在 node1 節點, 將 Hibench.tar.gz 解壓至/home/test_tools/目錄下
tar zxvf /home/arm_bigdata_suite/HiBench.tar.gz -C /home/test_tools/
2、 在 node1, vim /home/test_tools/HiBench/conf/hadoop.conf 將hibench.hdfs.master 中hibench.hdfs.master obs://bucket_name/test1 的 bucket_name 替換成真正的桶名
6.2 Wordcount 測試
1、 在 node1,準備 wordcount 模型的運行數據
cd /home/test_tools/HiBench/bin/workloads/micro/wordcount/prepare
sh prepare.sh
數據準備完畢後,可執行如下命令查看數據存儲的位置(bucket_name 替換成真正
的桶名)
hdfs dfs -ls obs://bucket_name/test1/HiBench/Wordcount/Input
2、以 MapReduce 的方式運行 wordcount 業務
cd /home/test_tools/HiBench/bin/workloads/micro/wordcount/hadoop
sh run.sh
3、以 Spark 的方式運行 wordcount 業務
cd /home/test_tools/HiBench/bin/workloads/micro/wordcount/spark
sh run.sh
4、測試完畢後,可通過如下命令運行結果數據存儲的位置( bucket_name 替換成真正的桶名)
hdfs dfs -ls obs://bucket_name/test1/HiBench/Wordcount/Output
6.2 Terasort 測試
1、 在 node1 上, 準備 terasort 模型的運行數據
cd /home/test_tools/HiBench/bin/workloads/micro/terasort/prepare
sh prepare.sh
2、 以 MapReduce 的方式運行 terasort 業務
cd /home/test_tools/HiBench/bin/workloads/micro/terasort/hadoop
sh run.sh
3、 以 Spark 的方式運行 terasort 業務
cd /home/test_tools/HiBench/bin/workloads/micro/terasort/spark
sh run.sh
4、測試完畢後, 可通過如下命令運行結果數據存儲的位置(bucket_name 替換成真正的桶名)
hdfs dfs -ls obs://bucket_name/test1/HiBench/Terasort/Output
6.3 YCSB
工具準備
1、 在 node1 節點, 將 ycsb-0.12.0.tar.gz 拷貝並解壓至/home/test_tools/目錄下
tar zxvf /home/arm_bigdata_suite/ycsb-0.12.0.tar.gz -C /home/test_tools/
chmod 755 -R /home/test_tools/ycsb-0.12.0/
數據準備階段
2、 在 node1 上創建表, 執行 hbase shell 後, 創建表:
create 'BTable','family',{SPLITS => (1..20).map {|i| "user#{1000+i*(9999-1000)/20}"}}
exit
3、 在 node1 節點執行如下命令, 啓動數據導入(以 10000 數據量爲例)
cd /home/test_tools/ycsb-0.12.0/
nohup bin/ycsb load hbase10 -P workloads/workloada -cp /home/modules/hbase-
2.1.0//conf:/home/modules/hbase-2.1.0/lib/*:hbase10-binding/lib/hbase10-binding-
0.12.0.jar -p table=BTable -p columnfamily=family -p recordcount=10000 -threads 100
-s 2> workload-loadrun.txt -s 1> workload-loadresult.txt &
4、ps -ef |grep ycsb 確認執行完畢後, 可查看 workload-loadrun.txt 及 workloadaBloadresult1.txt
5、分析 workload-loadresult.txt, 確保[INSERT], Return=OK 的條目數符合預期。
6.4測試執行階段
本次此時中分別運行測試模型 a,b,c,d:
YCSB | 讀 | 寫 |
---|---|---|
模型a | 10%寫 | 90%讀 |
模型 b | 50%寫 | 50%讀 |
模型 c | 90%寫 | 10%讀 |
模型 d | 100%寫 | 0%讀 |
1、 在 node1 節點執行如下命令,運行測試模型 a, 待 ps -ef |grep ycsb 確認已無 ycsb 進程後, 查看 cat workloada-result.txt
cd /home/test_tools/ycsb-0.12.0/
nohup bin/ycsb run hbase10 -P workloads/workloada -cp /home/modules/hbase-
2.1.0//conf:/home/modules/hbase-2.1.0/lib/*:hbase10-binding/lib/hbase10-binding-
0.12.0.jar -p table=BTable -p columnfamily=family -p operationcount=10000 -threads
100 -s 2> workloada-run.txt -s 1> workloada-result.txt &
2、運行測試模型 b, 待 ps -ef |grep ycsb 確認已無 ycsb 進程後, 查看 cat workloadcresult.txt
nohup bin/ycsb run hbase10 -P workloads/workloadb -cp /home/modules/hbase-
2.1.0//conf:/home/modules/hbase-2.1.0/lib/*:hbase10-binding/lib/hbase10-binding-
0.12.0.jar -p table=BTable -p columnfamily=family -p operationcount=10000 -threads
100 -s 2> workloadb-run.txt -s 1> workloadb-result.txt &
7 附錄
7.1集羣格式化
在 node1, 執行如下命令(參數爲桶名) 可以完成大數據集羣格式化操作, 這意味着:
本集羣中 hdfs 將會重新初始化, obs://${bucket_name}/hbasetest001/*將被清空, hbase 元數
據將被刪除, 集羣將會重新啓動,因此請謹慎使用本腳本。
[root@node1 ~]# sh /home/arm_bigdata_suite/complete_clean_restart.sh
bucket_name is empty. Please check it! Usage:
sh /home/arm_bigdata_suite/complete_clean_restart.sh [bucket_name]
[root@node1 ~]#
執行完畢後,檢查如下頁面是否可以正常打開:
1、登陸網址 http://node1 彈性 ip:8088/cluster,頁面可正常打開
2、使用 node1 的彈性 ip 地址,登陸 Hbase 首頁網址,能夠正常打開:
http://node彈性 ip:16010/master-status