Posted in: Linux

使用LVM进行磁盘管理

创建LVM

# 创建物理卷
[root@localhost ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

# 创建卷组
[root@localhost ~]# vgcreate vg_example /dev/sdb
  Volume group "vg_example" successfully created
[root@localhost ~]# vgs
  VG         #PV #LV #SN Attr   VSize   VFree
  centos       1   2   0 wz--n- <15.00g      0
  vg_example   1   0   0 wz--n- <10.00g <10.00g

# 创建逻辑组
[root@localhost ~]# lvcreate -l 100%free -n lv_example vg_example
  Logical volume "lv_example" created.
[root@localhost ~]# vgs
  VG         #PV #LV #SN Attr   VSize   VFree
  centos       1   2   0 wz--n- <15.00g    0
  vg_example   1   1   0 wz--n- <10.00g    0
[root@localhost ~]# lvs
  LV         VG         Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root       centos     -wi-ao----  13.39g

  swap       centos     -wi-ao----   1.60g

  lv_example vg_example -wi-a----- <10.00g

# 格式化逻辑组
[root@localhost ~]# mkfs.xfs /dev/vg_example/lv_example
meta-data=/dev/vg_example/lv_example isize=512    agcount=4, agsize=655104 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2620416, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# blkid |grep vg_example
/dev/mapper/vg_example-lv_example: UUID="83b3262d-d7d1-429e-ab04-67022e91865a" TYPE="xfs"

# 创建挂载点
[root@localhost ~]# mkdir /data
[root@localhost ~]# cat /etc/fstab
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=95ef0912-08e6-4fc9-9dc1-179e47ffe304 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
UUID=83b3262d-d7d1-429e-ab04-67022e91865a       /data   xfs     defaults        0 0

[root@localhost ~]# mount -a
[root@localhost ~]# df -Th |grep /data
/dev/mapper/vg_example-lv_example xfs        10G   33M   10G   1% /data

扩容LVM

# 磁盘扩容10G
[root@localhost ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

# PV扩容
[root@localhost ~]# pvresize /dev/sdb
  Physical volume "/dev/sdb" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

[root@localhost ~]# pvs
  PV         VG         Fmt  Attr PSize   PFree 
  /dev/sda2  centos     lvm2 a--  <15.00g     0 
  /dev/sdb   vg_example lvm2 a--  <20.00g 10.00g

# VG自动扩容
[root@localhost ~]# vgs
  VG         #PV #LV #SN Attr   VSize   VFree 
  centos       1   2   0 wz--n- <15.00g     0 
  vg_example   1   1   0 wz--n- <20.00g 10.00g

# LV扩容
# 因为磁盘换算问题导致失败
[root@localhost ~]# lvextend -L +10G /dev/vg_example/lv_example
  Insufficient free space: 2560 extents needed, but only 2559 available
[root@localhost ~]# lvextend -L +9.99G /dev/vg_example/lv_example
  Rounding size to boundary between physical extents: 9.99 GiB.
  Size of logical volume vg_example/lv_example changed from 10.00 GiB (2560 extents) to 19.99 GiB (5118 extents).
  Logical volume vg_example/lv_example successfully resized.

[root@localhost ~]# lvs
  LV         VG         Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root       centos     -wi-ao---- 13.39g                                                    
  swap       centos     -wi-ao----  1.60g                                                    
  lv_example vg_example -wi-ao---- 19.99g     

# 文件系统扩容
[root@localhost ~]# xfs_growfs /dev/vg_example/lv_example 
meta-data=/dev/mapper/vg_example-lv_example isize=512    agcount=4, agsize=655104 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2620416, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2620416 to 5240832
[root@localhost ~]# df -Th |grep /data
/dev/mapper/vg_example-lv_example xfs        20G   33M   20G   1% /data

# 扩容完成

使用xfs文件格式只能扩容磁盘,使用EXT4格式才能扩容和缩减磁盘。

Posted in: Something, Tips

PowerShell的小技巧

Powershell环境的设置

  1. update-help
    强制更新Powshell帮助文件,同时跳过更新错误文件,主要用于解决区域帮助文件错误。
Update-Help -Verbose -Force -ErrorAction SilentlyContinue

powershellupdate

  1. show-command
    图形化生成命令参数文件
# 这需要安装powershell-ise
show-command get-eventlog

showcommand

  1. 开启PS1脚本执行权限
# 以管理员权限打开powershell,执行如下命令,然后选择Y
Set-ExecutionPolicy RemoteSigned
  1. 防火墙开关
# 打开防火墙
Set-NetFirewallProfile -Enabled True
# 打开防火墙
Set-NetFirewallProfile -Enabled False
  1. 关机
# 重启
restart-computer
# 关机
stop-computer
  1. 新增磁盘
# 获取新磁盘信息

[vwsr010007.contoso.com]: PS C:\> get-disk

Number Friendly Name Serial Number                    HealthStatus         OperationalStatus      Total Size Partition
                                                                                                             Style
------ ------------- -------------                    ------------         -----------------      ---------- ----------
0      VMware, VM...                                  Healthy              Online                      40 GB GPT
1      VMware, VM...                                  Healthy              Offline                    100 GB RAW
# 初始化磁盘,默认创建gpt分区
[vwsr010007.contoso.com]: PS C:\> Initialize-Disk

位于命令管道位置 1 的 cmdlet Initialize-Disk
请为以下参数提供值:
Number[0]: 1
Number[1]:
[vwsr010007.contoso.com]: PS C:\> get-disk

Number Friendly Name Serial Number                    HealthStatus         OperationalStatus      Total Size Partition
                                                                                                             Style
------ ------------- -------------                    ------------         -----------------      ---------- ----------
0      VMware, VM...                                  Healthy              Online                      40 GB GPT
1      VMware, VM...                                  Healthy              Online                     100 GB GPT
# 创建分区
[vwsr010007.contoso.com]: PS C:\> New-Partition -DiskNumber 1 -AssignDriveLetter -UseMaximumSize


   DiskPath:\\?\scsi#disk&ven_vmware_&prod_vmware_virtual_s#5&174a0eaf&0&000100#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}

PartitionNumber  DriveLetter Offset                                        Size Type
---------------  ----------- ------                                        ---- ----
2                D           135266304                                 99.87 GB Basic
# 格式化分区
[vwsr010007.contoso.com]: PS C:\> Format-Volume -DriveLetter D -FileSystem NTFS

DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining     Size
----------- --------------- ---------- --------- ------------ ----------------- -------------     ----
D                           NTFS       Fixed     Healthy      OK                     99.76 GB 99.87 GB

Posted in: Something, Tips

离线加域

在MS ActiveDirectory的维护工作中,经常会出现承担多种域权限的主机需要重新刷系统的情况。一般的操作方式是退域、重装、删除域信息、重新加域、再次赋权,这样可以确保安全、可靠的维护域中计算机账号的权限正确。不过,从2008R2开始,MS提供了可以离线加域的方法,来避免这一麻烦的处理过程。简单来说,就是从AD中把计算机账号的属性导出为加密文本,然后再在新建的主机上导入,重启即可使用域账号登录并继承原有域权限。
实现方法就两条命令:

# 在可以正常登录AD的主机上导出域中计算机账号信息,然后把文本文件复制到新机上
djoin /provision /domain_name /machine_name /savefile <filename.txt> /reuse
# 在重刷系统的主机上以管理员权限导入域信息
djoin /requestodj /loadfile <filename.txt> /windowspath <path to the Windows directory of the offline image> /localos

具体的解析在此

Posted in: ServerCore, Tips

Hyper-V主机的开局

Hyper-V是微软推出的虚拟化平台,它具有免费、高效、功能完备和安全的特性,但他的管理是基于powershell和winrm来进行管理配置。习惯了windows的图形界面配置和Linux的Bash管理,初次上手还是有点难度。

安装

略,……

初始配置

开局默认可以使用sconfig这个TUI工具来进行改计算机名、加域、调整时间、设置IP地址等初始化操作。

安装Windows功能

# 安装Hyper-V Powershell 
Install-WindowsFeature Hyper-V-PowerShell
# 安装SNMP服务
Install-WindowsFeature SNMP-Service
# 安装数据中心桥接功能
Install-WindowsFeature Data-Center-Bridging
Install-WindowsFeature Data-Center-Bridging -IncludeManagementTools
# 打开ICMP Ping功能
Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In
# 打开远程桌面端口
Get-NetFirewallRule -Name RemoteDesktop*
# 受勒索软件RansomWin32WannaCrypt影响,移除FS-SMB1(需要重启)
remove-WindowsFeature fs-smb1
# 开启多路径功能
Enable-WindowsOptionalFeature -Online -Featurename MultipathIO

开启远程管理

  1. 打开Powershell的远程管理功能,使用powershell
Configure-SMRemoting -enable
Enable-PSRemoting -force
  1. 打开winrm的远程管理功能,使用cmd
# 快速配置winrm
winrm quickconfig(输入Y)
# 设置认证方式为基本认证
winrm set winrm/config/service/auth @{Basic="true"}
# 将所有计算机纳入信任主机
winrm s winrm/config/Client @{TrustedHosts="*"}
# 取消加密网络流量
winrm s winrm/config/Client @{AllowUnencrypted="true"}
# 提高性能
winrm set winrm/config @{MaxEnvelopeSizekb="150"}
winrm set winrm/config @{MaxTimeoutms ="60000"}
winrm set winrm/config @{MaxBatchItems="50"}

配置网络

# 查看网卡信息
Get-NetAdapter|Sort-Object Name |FT Name,InterfaceDescription,LinkSpeed,ifIndex,Status -AutoSize
# 创建网卡绑定
New-NetLbfoTeam -Name PublicNetwork -TeamMembers "NIC1","NIC3" -TeamingMode SwitchIndependent -LoadBalancingAlgorithm Dynamic -Confirm:$false
# 新增网卡到已建立网卡组
Add-NetLbfoTeamMember -Name "NIC2" -Team PublicNetwork
# 设置网卡地址
Get-NetAdapter FSNPublicNetwork | New-NetIPAddress -IPAddress '172.16.1.111' -AddressFamily IPv4 -PrefixLength 16 -DefaultGateway '172.16.1.254'
# 设置DNS
Get-NetAdapter FSNPublicNetwork | Set-DnsClientServerAddress -ServerAddresses '172.16.1.1','172.16.1.2'
# 设置VLAN
Set-VMNetworkAdapterVlan -ManagementOS -VMNetworkAdapterName PublicNetwork -Access -VLanID 10

新增磁盘

# 获取新增磁盘编号
Get-Disk
# 初始化磁盘
Initialize-Disk -Number 1 -PartitionStyle GPT
# 设置盘符
New-Partition -DiskNumber 1 -UseMaximumSize -DriveLetter D
# 格式化
Format-Volume -DriveLetter D -FileSystem NTFS -Force

收尾工作

# 修改管理员密码
net user administrator new_password
# 修改主机名
netdom renamecomputer %computername% /newname
# 重启
shutdown /r /t 0
Posted in: Something, Tips

如何打开iDRAC虚拟控制台

在戴尔服务器的日常运维中,我们可以使用服务器自带的iDRAC带外管理器来进行远程的系统安装、配置以及开关机、重启的操作。在实际使用中,iDRAC的虚拟控制台会通过浏览器下载启动链接,再调用相关接口来在本地显示远程服务器图形界面。

因为下载回来的.jnlp文件并不能直接使用,必须要进行相关的配置。网上有很多信息来解决这个问题,比如保留java版本在7,改后缀名之类,其实该升还是要升版本。

安装最新版的JRE

[1]下载链接

配置JAVA

  1. 添加访问地址到可信列表中

  1. 修改JAVA的sslv3选项
    打开“C:\Program Files (x86)\Java\jre1.8.0_241\lib\security”目录下面的java.security文件;
    查找SSLv3选项,并确保此项全部注释掉,然后保存关闭。
# jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \
    EC keySize < 224, 3DES_EDE_CBC, anon, NULL
  1. 修改虚拟控制台文件的打开方式
    把文件打开方式指向"C:\Program Files (x86)\Java\jre1.8.0_241\bin\javaws.exe"

双击打开控制台文件



Posted in: Tips

网卡配置项

修改电脑网卡高级设置可以提高网络速度。另外,建议关闭在Realtek网卡高级设置中的以下其他选项:流控制/FlowControl、巨型帧/Jumboframe、大量传送负载/OffloadLargesend、EEE(Energy Efficient Ethernet)、环保节能/GreenEthernet、硬件效验和/OffloadChksum。

  1. 自动关闭 PCIe (省电)
    设置此选项可进入网络控制器省电模式设置此選項可進入网路卡省电模式

选项 说明
关闭 关闭自动关闭PCIe (省电)
开启, 电池 当使用电池且网络线未插入时,自动关闭PCIe连接
开启, 电池或 AC 当使用电池或AC且网络线未插入时,自动关闭PCIe连接

  1. 自动关闭 PHY (省电)
    设置此选项可进入网络控制器省电模式

选项 说明
关闭 关闭自动关闭PHY (省电)
开启, 电池 当使用电池且网络线未插入时,自动关闭PHY连接
开启, 电池或 AC 当使用电池或AC且网络线未插入时,自动关闭PHY连接

  1. 流控制(Flow Control)
    允许暂时停止传输数据包以适应接收端速度
    选项 说明
    开启 开启流控制 (默认值)
    关闭 关闭流控制
    据说开流控制会导致掉线,关

  2. 中断调整(interrupt moderation)
    根据网络的流量状况,动态调整发起处理器中断的频率

选项 说明
开启 开启中断调整合适化 (默认值)
关闭 关闭中断调整合适化
建议:关

  1. IPv4 硬件校验和(IPv4 Checksum Offload)
    设置硬件加速IPv4校验和

选项 说明
关闭 关闭硬件加速IPv4校验和
Rx & Tx 开启 启用硬件加速接收端和传输端IPv4校验和(默认值)
Rx 开启 启用硬件加速接收端IPv4校验和
Tx 开启 启用硬件加速传输端IPv4校验和
据说很多程序因为网卡校验和问题造成连接问题,关。

  1. 802.1Q/1p 虚拟网络标签
    IEEE 802.1Q帧信息用以表示每一个帧的优先级和其所属的虚拟局域网,设置这个选项可以启用硬件加速优先级帧传输和加入虚拟局域网识别标签。
    选项 说明
    开启 启用优先级传输和虚拟局域网
    关闭 禁用优先级传输和虚拟局域网 (默认值)

  2. 大量传送减负 (IPv4)(Large Send Offload(IPv4))
    设置网络控制器硬件加速IPv4数据包切割功能

选项 说明
开启 开启IPv4大量传送减负 (默认值)
关闭 关闭IPv4大量传送减负
大量传送减负是用网卡硬件分割TCP数据包,但其实只有关闭它才可以发挥网卡的真正性能,cpu占用率会提升,但不明显。网络处理速度会快一些。
这个一定要关,比如xp mode和win7主机局域网传文件慢就是这个造成的

  1. 大量传送减负 (IPv6) (Large Send Offload(IPv6))
    设置网络控制器硬件加速IPv6数据包切割功能

选项 说明
开启 开启IPv6大量传送减负 (默认值)
关闭 关闭IPv6大量传送减负
这个一定要关,比如xp mode和win7主机局域网传文件慢就是这个造成的

  1. 巨型帧(Jumbo Frame)
    Ethernet的数据最大传输单元定义为1500字节,数据长度大于1500字节封包即称为巨型帧,此选项可以调整Ethernet封包內所带数据的长度
    选项 说明
    2KB 最大传输单元 设置巨型帧为2K字节
    3KB 最大传输单元 设置巨型帧为3K字节
    4KB 最大传输单元 设置巨型帧为4K字节
    5KB 最大传输单元 设置巨型帧为5K字节
    6KB 最大传输单元 设置巨型帧为6K字节
    7KB 最大传输单元 设置巨型帧为7K字节
    8KB 最大传输单元 设置巨型帧为8K字节
    9KB 最大传输单元 设置巨型帧为9K字节
    关闭 禁用巨型帧(默认值)
    注意:启用巨型帧选项,网络控制器另一端所连接的网络设备也需支持巨型帧

  2. 网络地址(Priority & VLAN)
    改变网络控制器MAC地址
    默认值:不存在

  3. 优先级和VLAN
    IEEE 802.1Q数据包信息用以表示每一个数据包的优先级和其所属的虚拟局域网,设置这个选项可以启用硬件加速优先级数据包传输或加入虚拟局域网识别标志
    选项 说明
    优先级 & VLAN 关闭 关闭优先级传输和虚拟局域网
    优先级 & VLAN 开启 开启优先级传输和虚拟局域网 (默认值)
    优先级开启 开机优先级传输
    VLAN 开启 开启虚拟局域网硬件标志功能

  4. 接收端缓冲区(Receive Buffers)
    设置接收端缓冲区 选项 范围
    缓冲区大小 1~512 (默认值:512)
    建议:开最大。

  5. 接收端调整
    接收端调整(Received Side Scaling, RSS)是一种动态指派多核心处理器接收数据包的负载均衡机制,借由调整多核心处理器处理接收数据包以达到多核心系统的处理器负载均衡。
    选项 说明
    开启 开启接收端调整 (默认值)
    关闭 关闭接收端调整
    注意:
    RTL8168C及RTL8102E系列网络控制器才支持接收端调整。

  6. 关机网络唤醒
    设置关机后可从网络唤醒

选项 说明
开启 开机关机后网络唤醒
关闭 关闭关机后网络唤醒(默认值)

  1. 连接速度/双工模式(Speed & Duplex)
    切换连接速度和双工模式
    选项 说明
    自动侦测 自动侦测连接网络的连接速度和双工模式(默认值)
    10Mbps半双工 设置为 10Mbps半双工连接模式
    10Mbps全双工 设置为 10Mbps全双工连接模式
    100Mbps半双工 设置为 100Mbps半双工连接模式
    100Mbps全双工 设置为100Mbps全双工连接模式
    1000Mbps全双工 设置为1000Mbps全双工连接模式 (*)
    注意:RTL8101E、RTL8102E及RTL8139系列网络控制器为10/100 Mbps,所以并不支持1000 Mbps的连接速度。

  2. TCP 硬件校验和 (IPv4) (TCP Checksum Offload(IPv4))
    设置硬件加速TCP校验和 (IPv4)

选项 说明
关闭 关闭硬件加速TCP校验和(IPv4)
Rx & Tx 开启 启用硬件加速接收端及传输端TCP校验和(IPv4)(默认值)
Rx 开启 启用硬件加速接收端TCP校验和(IPv4)
Tx 开启 启用硬件加速传输端TCP校验和 (IPv4)
据说很多程序因为网卡校验和问题造成连接问题,建议:关,校验还是用cpu。

  1. TCP 硬件校验和 (IPv6) (TCP Checksum Offload(IPv4))
    设置硬件加速TCP校验和 (IPv6)

选项 说明
关闭 关闭硬件加速TCP校验和(IPv6)
Rx & Tx 开启 启用硬件加速接收端及传输端TCP校验和(IPv6)(默认值)
Rx 开启 启用硬件加速接收端TCP校验和(IPv6)
Tx 开启 启用硬件加速传输端TCP校验和(IPv6)
据说很多程序因为网卡校验和问题造成连接问题,建议:关,校验还是用cpu。

  1. 传送缓冲区(Transmit Buffers)
    设置传送缓冲区
    缓冲区大小:1~128 (默认值:128)
    建议:最大

  2. UDP 硬件校验和 (IPv4)(UDP Checksum Offload(IPv4))
    设置硬件加速UDP校验和 (IPv4)

选项 说明
关闭 关闭硬件加速UDP校验和(IPv4)
Rx & Tx 开启 启用硬件加速接收端及传输端UDP校验和(IPv4)(默认值)
Rx 开启 启用硬件加速接收端UDP校验和(IPv4)
Tx 开启 启用硬件加速传输端UDP校验和(IPv4)
据说很多程序因为网卡校验和问题造成连接问题,建议:关,校验还是用cpu。

  1. UDP 硬件校验和 (IPv6) (IPv4)(UDP Checksum Offload(IPv6))
    设置硬件加速UDP校验和 (IPv6)

选项 说明
关闭 关闭硬件加速UDP校验和(IPv6)
Rx & Tx 开启 启用硬件加速接收端及传输端UDP校验和(IPv6)(默认值)
Rx 开启 启用硬件加速接收端UDP校验和(IPv6)
Tx 开启 启用硬件加速传输端UDP校验和(IPv6)
据说很多程序因为网卡校验和问题造成连接问题,建议:关,校验还是用cpu。

  1. Wake on Magic Packet
    AMD公司的一项技术,网络发送(magic packet)数据包到某网卡,唤醒计算机的。

  2. Wake on pattern match

又是一种唤醒技术

Posted in: Something, System

修改Hosts文件加速访问GitHub

在公司使用中国电信的公司宽带访问Github速度虽然不是飞快,但还是能够下载的。不过回家是用的移动宽带,访问github时能打开首页就算时烧高香了。那么首先想到的就是修改Hosts直接访问Github的地址,避免国内的CDN污染和线路瞎JB跳。
先说成果:

# Github
52.74.223.119 github.com
140.82.114.3 github.com
185.199.108.154 github.githubassets.com
185.199.109.154 github.githubassets.com
185.199.110.153 github.io
185.199.111.153 github.io
140.82.113.10 nodeload.github.com
69.171.234.29  github.global.ssl.fastly.net

效果么,只能说能用了。
方法很简单,就是打开站长之家的DNS检测工具,然后观察GitHub访问会用到那些域名,再把域名对应的IP查出来,把TTL值最小的写入hosts文件。虽然无聊,但是有效。

Posted in: Bigdata, Other

使用CDH示例程序进行字数统计

Wordcount程序是Hadoop上的经典“HelloWorld”程序。CDH系统自带了wordcount程序来检测部署的成功与否。

# 解压提前准备好的莎士比亚全集
[sujx@elephant ~]$ gzip -d shakespeare.txt.gz

# 上传至hadoop文件系统
[sujx@elephant ~]$ hdfs dfs -mkdir /user/sujx/input
[sujx@elephant ~]$ hdfs dfs -put shakespeare.txt /user/sujx/input

# 查看有哪些测试程序可用
[sujx@elephant ~]$ hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
An example program must be given as the first argument.
Valid program names are:
  aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.
  aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files.
  bbp: A map/reduce program that uses Bailey-Borwein-Plouffe to compute exact digits of Pi.  dbcount: An example job that count the pageview counts from a database.
  distbbp: A map/reduce program that uses a BBP-type formula to compute exact bits of Pi.    grep: A map/reduce program that counts the matches of a regex in the input.
  join: A job that effects a join over sorted, equally partitioned datasets
  multifilewc: A job that counts words from several files.
  pentomino: A map/reduce tile laying program to find solutions to pentomino problems.       pi: A map/reduce program that estimates Pi using a quasi-Monte Carlo method.
  randomtextwriter: A map/reduce program that writes 10GB of random textual data per node.   randomwriter: A map/reduce program that writes 10GB of random data per node.
  secondarysort: An example defining a secondary sort to the reduce.
  sort: A map/reduce program that sorts the data written by the random writer.
  sudoku: A sudoku solver.
  teragen: Generate data for the terasort
  terasort: Run the terasort
  teravalidate: Checking results of terasort
  wordcount: A map/reduce program that counts the words in the input files.
  wordmean: A map/reduce program that counts the average length of the words in the input files.
  wordmedian: A map/reduce program that counts the median length of the words in the input files.
  wordstandarddeviation: A map/reduce program that counts the standard deviation of the length of the words in the input files.

# 执行mapreduce运算,output文件夹会自动建立
[sujx@elephant ~]$ hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount /user/sujx/input/shakespeare.txt /user/sujx/output/

# 查看输出结果
[sujx@elephant ~]$ hdfs dfs -ls /user/sujx/output
Found 4 items
-rw-r--r--   3 sujx supergroup          0 2020-03-09 02:47 /user/sujx/output/_SUCCESS      -rw-r--r--   3 sujx supergroup     238211 2020-03-09 02:47 /user/sujx/output/part-r-00000  -rw-r--r--   3 sujx supergroup     236617 2020-03-09 02:47 /user/sujx/output/part-r-00001  -rw-r--r--   3 sujx supergroup     238668 2020-03-09 02:47 /user/sujx/output/part-r-00002 

# 查看输出内容
[sujx@elephant ~]$ hdfs dfs -tail /user/sujx/output/part-r-00000
.       3
writhled        1
writing,        4
writings.       1
writs   1
written,        3
wrong   112
wrong'd-        1
wrong-should    1
wrong.  39
wrong:  1
wronged 11
wronged.        3
wronger,        1
wronger;        1
wrongfully?     1
wrongs  40
wrongs, 9
wrongs; 9
wrote?  1
wrought,        4
…………
Posted in: Bigdata, Something

HDFS初步使用

HDFS(Hadoop Distributed File System)是可扩展、容错、高性能的分布式文件系统,异步复制,一次写入多次读取,主要负责存储。其概念和内容可以参考[1]。这里就做一个简单的实验来看一下其文件管理的功能。更多的Hadoop命令可以参考[2]

用户建立

在实验环境中,不建议使用root账号直接登录运行,所以建立一个普通账号。

# Elephant主机执行
# 安装ansible
[root@elephant ~]# yum install -y ansible
# 在/etc/ansible/hosts中新增所有主机名
# 建立ansible文件
[root@elephant ~]# mkdir playbook
[root@elephant ~]# vim ./playbook/useradd.yaml
---
- hosts: hadoop
  remote_user: root
  vars_prompt:
    - name: user_name
      prompt: Enter Username
      private: no
    - name: user_passwd
      prompt: Enter Password
      encrypt: "sha512_crypt"
      confirm: yes
  tasks:
    - name: create user
      user:
        name: "{{user_name}}"
        password: "{{user_passwd}}"

# 执行
[root@elephant ~]# ansible-playbook ./playbook/useradd.yaml
Enter Username: sujx
Enter Password:
confirm Enter Password:

PLAY [hadoop] *****************************************************************************

HDFS文件使用

我们先将准备的481M文件(access.log)上传至用户家目录,看看这个文件将在hdfs文件系统中如何存储。

[root@elephant ~]# su hdfs
[hdfs@elephant root]$ hadoop fs -mkdir /user/sujx
[hdfs@elephant root]$ hadoop fs -chown sujx /user/sujx
[hdfs@elephant root]$ su sujx -
[hdfs@elephant root]$ hdfs dfs -put access_log weblog

然后,我们通过hdfs的web控制台就可以看到文件的存储情况,可见文件以3副本的形式,按照每个128M大小的存储块分割存储在namenode之上。当前情况是分成了4块。
show
block

我们可以从lion主机中看到存储的数据块。

[root@lion ~]# tree /dfs
/dfs
`-- dn
    |-- current
    |   |-- BP-752680285-192.168.174.131-1582986010714
    |   |   |-- current
    |   |   |   |-- VERSION
    |   |   |   |-- dfsUsed
    |   |   |   |-- finalized
    |   |   |   |   `-- subdir0
    |   |   |   |       |-- subdir0
    |   |   |   |       |-- subdir1
    |   |   |   |       |-- subdir2
    |   |   |   |       |-- subdir3
    |   |   |   |       |   |-- blk_1073742734
    |   |   |   |       |   |-- blk_1073742734_1910.meta
    |   |   |   |       `-- subdir4
    |   |   |   `-- rbw
    |   |   |-- scanner.cursor
    |   |   `-- tmp
    |   `-- VERSION
    `-- in_use.lock
Posted in: Bigdata, Something, System

离线部署CDH5.16.2

在实践了CDH6的离线部署之后,发现Cloudera的官方教程是基于CDH5.10的。同时,CDH6的内存占用比较高,我的机器有点遭不住,所以又把CDH5的部署实施走了一遍。

模板部署

  1. 安装CentOS7.10,并完成yum升级;
  2. 所有主机时间与阿里云时间服务器同步;
  3. 关闭selinux和firewalld;
  4. 安装JDK和mysql-connect;
[root@localhost ~]# wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.rpm
[root@localhost ~]# yum localinstall jdk-8u202-linux-x64.rpm
[root@localhost ~]# mv mysql-connector-java-5.1.39-bin.jar /usr/share/java/mysql-connector-java.jar 
  1. 关闭透明大页;
[root@localhost ~]# vim /etc/rc.d/rc.local

# 在最后一行添加如下内容
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

# 赋予rc.local具有可执行权限
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
[root@localhost ~]# sh /etc/rc.d/rc.local

# 检查
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
  1. 调整swap策略
[root@localhost ~]# echo 10 > /proc/sys/vm/swappiness
[root@localhost ~]# echo vm.swappiness = 10 >> /etc/sysctl.conf
  1. 修改文件句柄数
[root@localhost ~]# vim /etc/security/limits.conf
# 添加如下内容
* soft nofile 100000
* hard nofile 100000
  1. 收尾
[root@localhost ~]# sys-unconfig
  1. 下载CM和CDH

CM下载地址

CDH下载地址

Agent部署

  1. 配置主机ssh信任
  2. 安装ansible

# 安装 [root@elephant ~]# yum install -y ansible [root@elephant ~]# ls CDH-5.16.2-1.cdh5.16.2.p0.8-el5.parcel.sha1 CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel Mail anaconda-ks.cfg cloudera-manager-agent-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm cloudera-manager-daemons-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm cloudera-manager-server-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm cloudera-manager-server-db-2-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm enterprise-debuginfo-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm hadoop.tar.gz jdk-8u202-linux-x64.rpm manifest.json mysql-connector-java-5.1.39-bin.jar [root@elephant ~]# mkdir client [root@elephant ~]# mv cloudera-manager-daemons-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm client/ [root@elephant ~]# mv cloudera-manager-agent-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm client/ [root@elephant ~]# tar zcvf client.tar.gz client/
  1. 分发
[root@elephant ~]# ansible all -m copy -a 'src=/root/client.tar.gz dest=/root/'
[root@elephant ~]# ansible all -a 'tar zxf /root/client.tar.gz'
  1. 安装
[root@elephant ~]# ansible all -a 'yum localinstall /root/client/cloudera-manager-daemons-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm -y'
[root@elephant ~]# ansible all -a 'yum localinstall /root/client/cloudera-manager-agent-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm -y'

# 修改配置文件
[root@elephant ~]# sed -i ':s/localhost/lion/g' /etc/cloudera-scm-agent/config.ini
[root@elephant ~]# ansible lion,tiger,horse,monkey -m copy -a 'src=/etc/cloudera-scm-agent/config.ini dest=/etc/cloudera-scm-agent/'

# 重启服务
[root@elephant ~]# ansible all -a 'systemctl enable cloudera-scm-agent --now'
[root@elephant ~]# ansible all -a 'systemctl restart cloudera-scm-agent'

管理主机部署

  1. 安装
[root@elephant ~]# ansible lion -m copy -a 'src=/root/cloudera-manager-server-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm dest=/root/'
[root@elephant ~]# ansible lion -m copy -a 'src=/root/CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel dest=/opt/cloudera/parcel-repo'
[root@elephant ~]# ansible lion -m copy -a 'src=/root/manifest.json dest=/opt/cloudera/parcel-repo'
[root@elephant ~]# ansible lion -a 'yum localinstall /root/cloudera-manager-server-5.16.2-1.cm5162.p0.7.el7.x86_64.rpm -y'
  1. 数据库部署
[root@elephant ~]# ansible lion -a 'yum install -y mariadb mariadb-server'
[root@elephant ~]# ssh lion
[root@lion ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
key_buffer = 16M
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_limit = 8M
query_cache_size = 64M
query_cache_type = 1
max_connections = 550
server_id=1

binlog_format = mixed
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M

# InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit  = 2
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M

[root@lion ~]# systemctl enable mariadb --now

vim cdh.sql

CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'passwd';
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'passwd';
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'passwd';
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'passwd';
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'passwd';
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'passwd';
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY 'passwd';
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY 'passwd';
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'passwd';

# 导入数据库
[root@lion ~]# mysql -uroot -p < cdh.sql

# 扩展数据库架构和CDH6有区别
[root@lion ~]# cp /usr/share/java/mysql-connector-java.jar /usr/share/cmf/lib/
[root@lion ~]# sh /usr/share/cmf/schema/scm_prepare_database.sh mysql scm scm
Enter SCM password:
JAVA_HOME=/usr/java/jdk1.8.0_202-amd64
Verifying that we can write to /etc/cloudera-scm-server
Creating SCM configuration file in /etc/cloudera-scm-server
Executing:  /usr/java/jdk1.8.0_202-amd64/bin/java -cp /usr/share/java/mysql-connector-java.jar:/usr/share/java/oracle-connector-java.jar:/usr/share/java/postgresql-connector-java.jar:/usr/share/cmf/schema/../lib/* com.cloudera.enterprise.dbutil.DbCommandExecutor /etc/cloudera-scm-server/db.properties com.cloudera.cmf.db.
[                          main] DbCommandExecutor              INFO  Successfully connected to database.
All done, your SCM database is configured correctly!

# 启动服务
[root@lion parcel-repo]# cd /opt/cloudera/parcel-repo/
[root@lion parcel-repo]# sha1sum CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel | awk '{ print $1 }' > CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel.sha
[root@lion ~]# chkconfig cloudera-scm-server on
[root@lion ~]# systemctl start cloudera-scm-server

# 检查结果
[root@lion ~]# netstat -tlnp |grep 7180
tcp        0      0 0.0.0.0:7180            0.0.0.0:*               LISTEN      3907/java 

GUI安装

接下来的安装就相对简单了,基本比CDH6简单。

start
start
start
start
start
start
start
start
start
start
start
end