光盘驱动外接服务器,服务器开机F12进BISO安装系统,选择any other systyem,其他默认即可,一直点finish,服务器最终重启进入安装程序.
系统安装时,系统盘的分区如下:
/home 50G(51200M)
/var 2G(2048M)
/boot 1G(1024M)
swap 20G(20480M)
/ 剩下的容量
注意:配置之前先熟悉linux基本命令 cd vi cat
1. 网卡bonding
注意:配置之前先熟悉网卡bond的作用
查看 /etc/sysconfig/network-scripts 目录可以看到服务器自带的四个网卡文件
ifcfg-em1,ifcfg-em2,ifcfg-p2p1,ifcfg-p2p2(名字可能有稍微差别),
em为普通网卡,pxpx为光纤网卡.
我们需要使用光纤网卡并且对其做bond0操作
首先编辑 ifcfg-p2p1 文件 修改成:
DEVICE=p2p1
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
再编辑ifcfg-p2p2 文件 修改成:
DEVICE=p2p2
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
在同目录下创建ifcfg-bond0文件,编辑文件添加内容(这里的IPADDR是bond0的IP地址,根据机器的实际情况修改):
DEVICE=bond0
BOOTPROTO=static
TYPE=bond
ONBOOT=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
BONDING_OPTS="mode=0 miimon=100"
DNS1=202.118.1.29
DNS2=202.118.1.53
编辑/etc/resolv.conf,修改成如下:
nameserver 202.118.1.29
nameserver 202.118.1.53
执行命令
systemctl stop firewalld.service
关闭防火墙,执行systemctl disable firewalld.service
禁止防火墙开机自启
然后执行下面的命令重启网络
(如果重启报错,尝试检查前面修改的文件是否有改错的,还不行的话执行service NetworkManager stop后再次执行下面命令)
service network restart
遇到的问题:
解决办法:删除bonding设备 执行rm -f ifcfg-bond0
删除bond0文件,然后注释掉ifcfg-p2p1,ifcfg-p2p2最后几行,如下
DEVICE=p2p2
ONBOOT=yes
BOOTPROTO=none
#MASTER=bond0
#SLAVE=yes
然后重启网络,这时bond0不存在了,再从头开始配置即可。
2. SSH免密登录
注意:先了解SSH基本原理
以两台服务器之间的SSH配置为例,首先分别对两台机器的系统文件修改:
第一台执行vi /etc/hostname
修改主机名,将文件内容改为s6
(这个是对应的主机名,不同主机改成自己对应名字),对第二台进行相应操作改成s7,
两台机器都执行vi /etc/hosts
在文件中添加ip映射:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.60 s6
192.168.1.70 s7
192.168.1.80 s8
两台机器都执行ssh-keygen -t rsa
生成公钥和私钥文件(公钥文件用于登录别的机器,A机器上有B机器的公钥,则B可以登录A),生成的文件在/root/.ssh目录下.
在s9上执行ssh-copy-id -i s7
将s6公钥拷贝到s7机器上
在/root/.ssh目录下执行cat id_rsa.pub >> authorized_keys
(authorized_keys是存放所有公钥的文件,包括本机和别的机器)
有多台机器配置ssh时,每台机器都需要有包含所有公钥的文件authorized_keys,可使用scp命令进行拷贝,如下
scp /.ssh/authorized_keys root@s7:/.ssh/
scp /.ssh/authorized_keys root@s8:/.ssh/
配置完成之后,即可使用ssh免密登录其他机器(第一次登陆时可能要输入密码,第二次登陆就不需要了)
3. 硬盘
注意:先了解linux硬盘分区挂载基本命令,linux 的dev目录是什么(如果在安装系统时已经预先进行了硬盘分区可省略此步骤,但是预先分区并没有格式化硬盘,仍需要手动格式化)
每台服务器一共安装了4块4T机械硬盘(实际容量3.6T),在使用硬盘之前需要对硬盘进行格式化和分区,我们对每块硬盘分一个区,挂载在提前创建好的文件夹目录下。
执行命令查看四块硬盘的名称,找到容量为4000G的硬盘,名字一般为sda,sdb,sdc,sdd
fdisk -l
以其中一块硬盘为例进行格式化和分区操作,执行命令进入分区工具
parted /dev/sda
执行命令将分区格式改为gpt
mklabel gpt
然后执行print
命令可以看到sda硬盘分区状态,执行mkpart primary 0 4001gb
创建一个分区,容量从0开始到4001G全部空间,有提示请忽略,再次print
可以看到分区已经建立,执行quit
退出分区工具。
执行mkfs.ext4 -F /dev/sda1
对硬盘进行格式化,由于硬盘较大,等待命令执行完成。
在根目录/下创建文件夹,用于挂载硬盘,执行mkdir -p hddata/1/dfs
创建文件夹,执行mount /dev/sda1 /hddata/1/dfs
将硬盘挂在在对应目录下。
编辑/etc/fstab,最后四行为我们添加的内容,修改完后,每次开机硬盘就会自动挂载.
# /etc/fstab
# Created by anaconda on Fri Jul 26 10:07:51 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=76428df8-0818-469e-ab82-8dc6f9a11a93 /boot xfs defaults 0 0
UUID=076D-C578 /boot/efi vfat umask=0077,shortname=winnt 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-var /var xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sda1 /hddata/1/dfs ext4 defaults 0 0
/dev/sdb1 /hddata/2/dfs ext4 defaults 0 0
/dev/sdc1 /hddata/3/dfs ext4 defaults 0 0
/dev/sdd1 /hddata/4/dfs ext4 defaults 0 0
4. ntp时间同步
对每台服务器执行yum install -y ntp
安装ntp,并且执行systemctl start ntpd
启动ntp服务,执行systemctl enable ntpd
开机自启ntp.
对主服务器(这里我是s10)/etc/ntp.conf文件进行修改,在原有的基础上添加如下,并且注释掉了4行,
倒数第二行是设置本机为时间服务器.
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 10
保存修改后执行systemctl restart ntpd
重启ntp,执行ntpstat
可以发现已经向本地同步时间.有时执行过后依然没向本地同步时间,可以稍微等一会儿再执行一次,需要一点时间,也可执行如下命令进行查看:watch ntpq -p
对从服务器(我这里是s9)/etc/ntp.conf文件修改,
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server s10
保存修改后执行systemctl restart ntpd
重启ntp,执行ntpstat
可以发现已经向s10同步时间(这个过程需要等待15分钟左右),如果一直没同步,执行ntpdate -u s10
可向s10手动同步时间,若此命令成功应该没有问题.
执行hwclock -w
将系统时间同步到BIOS硬件时间,若执行date
查看发现系统时间是EDT,依次执行下面两个命令修改linux系统的时间EDT为CST.
mv /etc/localtime /etc/localtime.bak
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
EDT:指美国东部夏令时间,波士顿、纽约市、华盛顿哥伦比亚特区,都在这个时区内,跟北京时间有12小时的时差,晚12小时。
CST:可以指下面两种:
1. 美国中部标准时间(西六区,-6:00),中国是东八区(+8:00),北京时间比美国中部标准时间早14个小时。3:45 PM CST 是北京时间凌晨1:45。
2. 中澳大利亚标准时间(+10:30),中国是东八区(+8:00),北京时间比中澳大利亚标准时间晚2个半小时。3:45 PM CST 是北京时间下午上午5:45。
5. 基本软件安装配置
注意:要安装的有jdk1.8,hadoop,hbase,zookeeper,spark
jdk下载地址:点击
hadoop下载地址:
hbase下载地址:
zookeeper下载地址:点击
spark下载地址:
tar -zxvf (压缩包名)
export JAVA_HOME=/root/software/jdk1.8.0_221
export HADOOP_HOME=/root/software/hadoop-3.1.2
export ZOOKEEPER_HOME=/root/software/apache-zookeeper-3.5.5-bin
export HBASE_HOME=/root/software/hbase-2.2.0
export HBASE_CONF_DIR=/root/software/hbase-2.2.0/conf
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin
source /etc/profile
使配置文件立即生效.nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
在Hadoop安装目录
/software/hadoop-3.1.2/etc/hadoop
下修改配置文件hadoop-env.sh``````core-site.xml``````hdfs-site.xml``````yarn-site.xml``````mapred-site.xml
/software/hadoop-3.1.2/sbin
下修改启动停止脚本文件start-dfs.sh``````stop-dfs.sh``````start-yarn.sh``````stop-yarn.sh
JAVA_HOME=/software/jdk1.8.0_221
fs.defaultFS
hdfs://s6:8020
hadoop.tmp.dir
/hddata/tmp
dfs.name.dir
/hddata/1/dfs,/hddata/2/dfs,/hddata/3/dfs,/hddata/4/dfs
namenode上存储hdfs名字空间元数据
dfs.data.dir
/hddata/1/dfs,/hddata/2/dfs,/hddata/3/dfs,/hddata/4/dfs
datanode上数据块的物理存储位置
dfs.replication
2
dfs.permissions
false
mapreduce.framework.name
yarn
mapreduce.framework.name
yarn
yarn.resourcemanager.hostname
s6
yarn.nodemanager.aux-services
mapreduce_shuffle
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
start-all.sh
,下面给出终端输出结果.[root@s6 conf]# start-all.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Starting namenodes on [s6]
Last login: Thu Aug 1 19:19:01 CST 2019 on pts/6
Starting datanodes
Last login: Thu Aug 1 19:22:11 CST 2019 on pts/6
Starting secondary namenodes [s6]
Last login: Thu Aug 1 19:22:14 CST 2019 on pts/6
Starting resourcemanager
Last login: Thu Aug 1 19:22:17 CST 2019 on pts/6
Starting nodemanagers
Last login: Thu Aug 1 19:22:22 CST 2019 on pts/6
[root@s6 conf]# jps
257424 NodeManager
256500 SecondaryNameNode
255691 NameNode
257097 ResourceManager
258172 Jps
[root@s7 conf]# jps
170248 NodeManager
174969 Jps
169516 DataNode
[root@s8 logs]# jps
64875 DataNode
162126 Jps
71468 NodeManager
如果进程和上面显示一致,则运行没有问题,在主节点执行stop-all.sh
停止hadoop,在执行jps
可看到hadoop进程都成功关闭.
[root@s6 conf]# stop-all.sh
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
Stopping namenodes on [s6]
Last login: Thu Aug 1 19:22:24 CST 2019 on pts/6
Stopping datanodes
Last login: Thu Aug 1 19:26:16 CST 2019 on pts/6
Stopping secondary namenodes [s6]
Last login: Thu Aug 1 19:26:17 CST 2019 on pts/6
Stopping nodemanagers
Last login: Thu Aug 1 19:26:19 CST 2019 on pts/6
Stopping resourcemanager
Last login: Thu Aug 1 19:26:22 CST 2019 on pts/6
如果遇到错误,查看/software/hadoop-3.1.2/logs
下的日志文件寻找错误原因,可复制错误提示百度寻找.
mkdir -p zookeeper/{data,log}
source /etc/profile
使配置文件生效export JAVA_HOME=/software/jdk1.8.0_221
export HADOOP_HOME=/software/hadoop-3.1.2
export ZOOKEEPER_HOME=/software/apache-zookeeper-3.5.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
tickTime=2000
dataDir=/hddata/zookeeper/data
dataLogDir=/hddata/zookeeper/logs
clientPort=2181
initLimit=5
syncLimit=2
server.1=s6:2888:3888
server.2=s7:2888:3888
server.3=s8:2888:3888
echo '1' > /hddata/zookeeper/data/myid
s7执行
echo '2' > /hddata/zookeeper/data/myid
s8执行
echo '3' > /hddata/zookeeper/data/myid
创建的myid文件里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字。(zookeeper启动时会读取这个文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。)
zkServer.sh start
启动zookeeper集群,启动顺序随意没要求。执行jps
可以看到zookeeper进程存在,执行zkServer.sh status
查看每个节点zookeeper状态.[root@s6 ~]# jps
102793 QuorumPeerMain
374559 Jps
[root@s6 conf]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /software/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
[root@s7 conf]# jps
4262 QuorumPeerMain
[root@s7 conf]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /software/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
[root@s8 logs]# jps
279469 QuorumPeerMain
[root@s8 logs]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /software/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
tar -zxvf hbase-1.2.6-bin.tar -C /software/
解压HBase到指定安装目录/software
下,修改vi /etc/profile
,并且添加HBASE_HOME,修改PATH,执行source /etc/profile
使配置文件立即生效,scp /etc/profile root@s7:/etc
将配置文件分发到其他机器同时在执行source
命令export JAVA_HOME=/software/jdk1.8.0_221
export HADOOP_HOME=/software/hadoop-3.1.2
export HBASE_HOME=/software/hbase-2.2.0
export ZOOKEEPER_HOME=/software/apache-zookeeper-3.5.5-bin
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin
export JAVA_HOME=/software/jdk1.8.0_221
export HBASE_MANAGES_ZK=false
hbase.rootdir
hdfs://s6:8020/hbase
hbase.cluster.distributed
true
hbase.zookeeper.property.clientPort
2181
hbase.zookeeper.quorum
s6,s7,s8
hbase.unsafe.stream.capability.enforce
false
s7
s8
scp -r /software/hbase-2.2.0 root@s7:/software/
scp -r /software/hbase-2.2.0 root@s8:/software/
start-all.sh
,启动hadoop,再执行zkServer.sh start
启动zookeeper,最后执行start-hbase.sh启动hbase(注意:启动顺序为hadoop->zookeeper->hbase,停止顺序为hbase->zookeeper->hadoop)主节点
[root@s6 logs]# start-hbase.sh
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/software/hadoop-3.1.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/software/hbase-2.2.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.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.slf4j.impl.Log4jLoggerFactory]
running master, logging to /software/hbase-2.2.0/logs/hbase-root-master-s6.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/software/hadoop-3.1.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/software/hbase-2.2.0/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.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.slf4j.impl.Log4jLoggerFactory]
s8: running regionserver, logging to /software/hbase-2.2.0/bin/../logs/hbase-root-regionserver-s8.out
s7: running regionserver, logging to /software/hbase-2.2.0/bin/../logs/hbase-root-regionserver-s7.out
[root@s6 logs]# jps
301942 SecondaryNameNode
302867 NodeManager
102793 QuorumPeerMain
308828 Jps
302526 ResourceManager
308062 HMaster
301113 NameNode
从节点
[root@s7 conf]# jps
221234 Jps
4262 QuorumPeerMain
212773 DataNode
218376 HRegionServer
213484 NodeManager
[root@s8 logs]# jps
330656 NodeManager
279469 QuorumPeerMain
318237 DataNode
408975 HRegionServer
10668 Jps
以下内容与搭建无关
handsontable开源框架的api参考网址(点击访问)
handsontable加载数据时 settings中给定的data格式有两种,
一种是json对象型的,即[{k1:v1,k2:v2,k3:v3},{k1:v1,k2:v2,k3:v3},...],
另一种是数组型的,即[[v1,v2,v3,v4],[v1,v2,v3,v4],....].
当使用第一种时,不能对列进行删除
即js不能调用hot.alter('remove_col',index,amout)或者hot.removeCol(index)函数对列进行删除操作,
因为json格式的数据固定了字段.
非要这样用的话,删除列只能使用updateSettings({ColHeaders:xxx})的方法来更新字段.
所以使用第二种方式进行表格数据的渲染
第一个文件handsontable_generate.js:
主要是数据选择,隐藏显示逻辑和表的初始化,由于需要初始化多个table,因此采取tab标签的形式展示table,可生成多个table同时进行处理.
/**
* 全局变量解释:
* table_index----->记录清洗界面生成的表的个数,用户每选择一个表计数+1,删除一个表-1
* table_list ----->用于保存生成的自定义表对象
* 每个对象包含属性:
* hot:当前表对象,可用于调用表的各种方法属性
* Ccol:当前选中的列
* Crow:当前选中的行
* style_yichang:当前对象中 表格的异常变色数据
* style_danyi:当前对象中 表格的单一变色数据
* style_queshi:当前对象中 表格的缺失变色数据
* name:在数据库中该表的名称
* this_table_index---->当前表的索引
*/
第二个文件handsontable_operation.js:
主要是顶部功能栏的功能实现:
/**
* 对整个表格的所有操作函数 写在这里
* function:
* 1.行,列删除函数
* 2.下载功能
* 3.保存到数据库
* 4.跳转到数据分析 (待完成)
* 5.单一值响应 handson_danyi_detail()
* 缺失值响应 handson_queshi_detail()
* 异常值响应 handson_yichang_detail()
* 6.相关性响应 handson_relation_rate()
* 变化趋势响应 handson_change_trend()
*/
1.完成导数据的任务
相关性条状图宽度固定 做成下拉条
外接硬盘需要做的配置:https://www.cnblogs.com/fiberhome/p/8458783.html
0xAA55A55A在C#中和在java中是不一样的,因为java中的int类型是有符号4字节,可以表示-231~231-1所以
int a = 0xAA55A55A
(这里自动识别第一位为负号标志位,a=-1437227686)
在C#中int是有符号4字节,可以表示-231~231-1,
int a = 0xAA55A55
(这里编译错误,编译器认为0xAA55A55是2857739610,而int的位数不足以表达,所以报错)
要表示成java中的数,应该
uint a =0xAA55A55A
a = (int)a
(此时是告知编译器第一位是负号标志位,强转)