为什么每次进入命令都要重新Source /Etc/profile 才能生效?

1
2
3
4
5
6
#编辑JDK8
export JAVA_HOME="/usr/java/java8"
#编辑maven
export M2_HOME="/opt/idea-IU-162.1121.32/plugins/maven/lib/maven3"
#编辑PATH
export PATH="$JAVA_HOME/bin:$M2_HOME/bin:$PATH"

这是我的/etc/profile末尾的配置,JDK是没有问题的,不用source,echo $JAVA_HOME能出来,问题是如果要用mvn,每次就要source一遍才行,maven我用的是IDEA自带的。

回答 1、也可以放在~/.bashrc里面。或者在~/.bashrc里面加一句

1
source /etc/profile

(采用此方法,已成功生效)
回答 2、你可以把这几条命令写在 /etc/bash里面 就会自动执行了

from https://blog.csdn.net/lwplvx/article/details/79192182

VSCode使用Remote VSCode编辑远程服务器文件

本地的配置

1 在VSCode的扩展插件中找到Remote VSCode插件并进行安装;

2 配置ssh config文件,终端中输入:

1
vim ~/.ssh/config

粘帖一下内容(记得干掉注释内容)

1
2
3
4
5
6
Host dl_aws   # dl_aws 是一个名称,就类似于人类的名字一样
HostName 18.212.101.21 # remote的地址
User ubuntu # remote的名称,这个需要登陆到远端亲自确认
ForwardAgent yes # 默认yes就行
RemoteForward 52698 127.0.0.1:52698 # 前一个52698表示远端的端口,后一个是local的接收地址和端口,这个端口设置为和2步骤中的port一样,这样就可以在VSCode中进行上传和下载了
IdentityFile /Users/xxx/.ssh/id_rsa.pub # 这个表示是密匙文件,类比于平时接触的git下ssh的公匙

Read More

Hive使用动态分区插入数据

往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。

1.创建一个单一字段分区表

1
2
3
hive>
create table dpartition(id int ,name string )
partitioned by(ct string );

Read More

Create Separate Columns From Array Column in Spark Dataframe in Scala

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
scala> import org.apache.spark.sql.Column
scala> val df = Seq((Array(3,5,25), 3),(Array(2,7,15),4),(Array(1,10,12),2)).toDF("column1", "column2")
df: org.apache.spark.sql.DataFrame = [column1: array<int>, column2: int]

scala> def getColAtIndex(id:Int): Column = col(s"column1")(id).as(s"column1_${id+1}")
getColAtIndex: (id: Int)org.apache.spark.sql.Column

scala> val columns: IndexedSeq[Column] = (0 to 2).map(getColAtIndex) :+ col("column2") //Here, instead of 2, you can give the value of n
columns: IndexedSeq[org.apache.spark.sql.Column] = Vector(column1[0] AS `column1_1`, column1[1] AS `column1_2`, column1[2] AS `column1_3`, column2)

scala> df.select(columns: _*).show
+---------+---------+---------+-------+
|column1_1|column1_2|column1_3|column2|
+---------+---------+---------+-------+
| 3| 5| 25| 3|
| 2| 7| 15| 4|
| 1| 10| 12| 2|
+---------+---------+---------+-------+

from https://stackoverflow.com/questions/52276284/create-separate-columns-from-array-column-in-spark-dataframe-in-scala-when-array/52277257#52277257

HTML5 利用 History API 无刷新更改地址栏

HTML5 新增的历史记录 API 可以实现无刷新更改地址栏链接,配合 AJAX 可以做到无刷新跳转。

简单来说:假设当前页面为renfei.org/,那么执行下面的 JavaScript 语句:

1
window.history.pushState(null, null, "/profile/");

之后,地址栏的地址就会变成renfei.org/profile/,但同时浏览器不会刷新页面,甚至不会检测目标页面是否存在。

Read More

Python查询Oracle中文乱码问题

用python连接Oracle是总是乱码,最后发现时oracle客户端的字符编码设置不对。

编写的python脚本中需要加入如下几句:

import os
os.environ[‘NLS_LANG’] = ‘SIMPLIFIED CHINESE_CHINA.UTF8’

这样可以保证select出来的中文显示没有问题。

要能够正常的insert和update中文,还需要指定python源文件的字符集密码和oracle一致。

1
2

# -*- coding: utf-8 -*-

参考 https://blog.csdn.net/jianhong1990/article/details/26487479

CDH集群安装

1.安装工具

1
2
3
4
5
6
mkdir -p /data/software/
cd /data/software/
wget http://www.theether.org/pssh/pssh-1.4.3.tar.gz
tar -zxvf pssh-1.4.3.tar.gz
cd pssh-1.4.3/
python setup.py install

准备工作

  • 查看服务器系统版本

    1
    2
    [root@xxx software]#  cat /etc/redhat-release
    CentOS Linux release 7.2.1511 (Core)
  • 首先修改各服务器的主机名

    1
    2
    3
    hostnamectl set-hostname  hadoop1
    localectl set-locale LANG=zh_CN.utf8
    .....
  • 在各服务器生成秘钥

    1
    ssh-keygen -t rsa
  • 修改/etc/hosts

    1
    vim /etc/hosts
  • 配置免密码登录
    将Cloudera Manager Server的秘钥放到追加到各服务器/root/.ssh/authorized_keys

  • 同步时间,不是必须的(用的腾讯云)

    1
    2
    # crontab -e
    */20 * * * * /usr/sbin/ntpdate ntpupdate.tencentyun.com >/dev/null &
  • 添加用户和组

    1
    2
    3
    4
    5
    6
    7
    8
    useradd --system --home=/data/work/cm-5.7.2 --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

    id cloudera-scm
    下为可选操作
    useradd sqoop2 -g sqoop
    groupadd hdfs
    groupadd hadoop
    useradd hdfs -g hadoop -d /var/lib/hadoop-hdfs/ -c 'Hadoop HDFS'
  • 修改部分配置[应该不是必须的]
    以root 用户执行命令

    1
    2
    3
    echo 10 > /proc/sys/vm/swappiness
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
  • 安装JDK8并配置好环境

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    root@hadoop001 work]# tar -cvf jdk8.tar /data/work/java1.8
    root@hadoop001 work]# scp jdk8.tar root@hadoop019:/data/software/
    [root@hadoop019 work]# vim /etc/profile
    export JAVA_HOME=/data/work/jdk/jdk1.8.0_111/
    export JRE_HOME=/data/work/jdk/jdk1.8.0_111//jre
    export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
    export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib/:$LD_LIBRARY_PATH
    export PATH=$PATH:$JAVA_HOME/bin:$MVN_HOME/bin:$JRE_HOME/bin
    [root@hadoop019 work]# source /etc/profile
    [root@hadoop019 work]# java -version

挂载磁盘

查看所有磁盘 fdisk -l
查看现有磁盘信息 df -hT
格式化磁盘 mkfs.xfs /dev/vdb
挂载磁盘
mkdir /data
mount /dev/vdb /data

下载Cloudera Manager

下载相应的cloudera-manager-centos7-cm*.tar.gz到/opt/cloudera-manager/
下载地址:http://archive.cloudera.com/cm5/cm/5/

1
2
3
4
wget https://archive.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.16.1_x86_64.tar.gz
wget http://archive.cloudera.com/cdh5/parcels/5.16.1/CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel
wget http://archive.cloudera.com/cdh5/parcels/5.16.1/CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha1
wget http://archive.cloudera.com/cdh5/parcels/5.16.1/manifest.json

安装第三方依赖

1
yum install chkconfig python bind-utils psmisc libxslt zlib sqlite fuse fuse-libs redhat-lsb cyrus-sasl-plain cyrus-sasl-gssapi

创建数据库

如下命令是创建部署各个服务所需的数据库,我本人倾向用不用先创建好,用的时候就可以直接部署服务了,不必再来数据库进行创建。
1
2
3
4
5
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database monitor DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

解压并修改配置文件

1
2
3
4
5
tar -zxvf cloudera-manager-centos7-cm5.16.1_x86_64.tar.gz

vim cm-5.16.1/etc/cloudera-scm-agent/config.ini
修改server_host为Cloudera Manager Server的地址
server_host=hadoop1

配置仓库目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@hadoop1 cloudera-manager]# mkdir -p /opt/cloudera/parcel-repo
[root@hadoop1 cloudera-manager]# chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
[root@hadoop1 cloudera-manager]# cd /opt/cloudera/parcel-repo
[root@hadoop1 parcel-repo]# cp /data/work/cloudera-manager/
CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel cloudera/ cm-5.16.1/
CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha1 cloudera-manager-centos7-cm5.16.1_x86_64.tar.gz manifest.json
[root@hadoop1 parcel-repo]# cp /data/work/cloudera-manager/CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel*
cp:是否覆盖"/data/work/cloudera-manager/CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha1"? ^C
[root@hadoop1 parcel-repo]# cp /data/work/cloudera-manager/CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel* ./
[root@hadoop1 parcel-repo]# ls
CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha1
[root@hadoop1 parcel-repo]# cp /data/work/cloudera-manager/manifest.json ./
[root@hadoop1 parcel-repo]# ls
CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha1 manifest.json

初始化数据库
此操作在主节点上进行,初始脚本配置数据库scm_prepare_database.sh,操作命令如下:

[root@cdh01 ~]/opt/cloudera-manager/cm-5.7.2/share/cmf/schema/scm_prepare_database.sh mysql -hcdh01 -uroot -proot –scm-host cdh01 scmdbn scmdbu scmdbp
说明:这个脚本就是用来创建和配置CMS需要的数据库的脚本。各参数是指:

mysql:数据库用的是mysql,如果安装过程中用的oracle,那么该参数就应该改为oracle。

-hcdh01:数据库建立在cdh01主机上面。也就是主节点上面。

-uroot:root身份运行mysql。-proot:mysql的root密码是root。

--scm-host cdh01:CMS的主机,一般是和mysql安装的主机是在同一个主机上。

最后三个参数是:数据库名,数据库用户名,数据库密码。

执行完成命令正常如下:


在这个地方就可以解释上面为什么要改jar名了。

配置CDH从节点目录

在所有的节点上创建parcels目录,操作如下:

mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
解释:Clouder-Manager将CDH从主节点的/opt/cloudera/parcel-repo目录中抽取出来,分发解压激活到各个节点的/opt/cloudera/parcels目录中。

启动Agent

1
/opt/cloudera-manager/cm-5.11.0/etc/init.d/cloudera-scm-agent start

在管理页面进行配置

  • 登录http://hadoop1:7180
  • 点击“主机”->“所有主机” ,可以看到所有节点,包括刚才添加的节点。这个时候新添加节点的状态是红的,正常情况下,过2分钟,节点的状态变为绿色正常。
  • 点击右上角“向集群添加主机”,然后点击 继续
  • 输入hadoop05,点击 搜索 ,出现如下界面
  • 点击 当前管理的主机(1)
  • 按照提示进行下边的操作

为新节点分配角色

例如:回到首页面,点击 HDFS ,点击 实例 ,选中新添加节点,点击 添加角色实例,然后按照提示依次进行。

CDH集群扩容记录

系统为Centos7.5,向集群添加hadoop019服务器(下边图片中的服务器名为hadoop04…,大致流程是这样的,之后会完善的)。

准备工作

  • 查看服务器系统版本

    1
    2
    [root@VM_10_10_centos ~]# cat /etc/redhat-release
    CentOS Linux release 7.5.1804 (Core)
  • 首先修改各新服务器的主机名

    1
    2
    hostnamectl set-hostname  hadoop019
    localectl set-locale LANG=zh_CN.utf8

Read More