CompileMind

compile code, compile mind

0%

Linux是一个多用户系统,但是对于一个多用户共存的系统中,当然不能够出现用户相互越权等一系列的安全问题,所以如何正确的管理账户成为了Linux系统中至关重要的一环。

前期准备

1.配置hostname(可选,了解)

在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty)。“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。而另一方面,“灵活”主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如Linuxidc)。

在CentOS7以前,配置主机的静态hostname是在/etc/sysconfig/network中配置HOSTNAME字段值来配置,而CentOS7之后若要配置静态的hostname是需要在/etc/hostname中进行。

进入Linux系统,命令行下输入hostname可以看到当前的hostname,而通常默认的hostname是local.localadmin。

本次试验环境在CentOS7下,所以我们编辑/etc/hostname文件,试验hostname为:hadoop.w4ng,填入其中,重启Linux,可以看到已经生效。
hostname.png

2.配置静态IP

同样,在CentOS7以后,其网卡配置已经有原先的/etc/sysconfig/network/network-scripts下面的ifcfg-eth0等改名为乐ifcfg-enpXsY(en表示ethnet,p表示pci设备,s表示soket)
ll-network-scripts.png
本人这里有两个ifcfg文件是因为配置了两块网卡分别做NAT以及与虚拟机Host-Only两个功能,实现双网卡上网

打开ifcfg-enp0s8,配置如下:

1
2
3
4
5
6
7
DEVICE=enp0s8 #设备名
HWADDR=08:00:27:10:6B:6B #硬件地址
TYPE=Ethernet #类型
BOOTPROTO=static #静态IP(必备)
IPADDR=192.168.56.88 #IP地址
NETMASK=255.255.255.0 #子网掩码
ONBOOT=yes #设备开机自动启动该网卡

3.配置hosts

打开/etc/hosts
配置为如下的:

1
2
3
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.88 hadoop.w4ng

配置hosts的理由是后期hadoop配置中相关的主机填写我们都是使用域名的形式,而IP地址与域名的转换在这里进行查询(还有DNS,但是这里不讨论)。

4.关闭防火墙

CentOS7与6的防火墙不一样。在7中使用firewall来管理防火墙,而6是使用iptables来进行管理的。当然,我们可以卸载7的firewall安装6的iptables来管理。本人就切换回了6的防火墙管理方式。

1
2
[root@localhost ~]#servcie iptables stop  # 临时关闭防火墙
[root@localhost ~]#chkconfig iptables off # 永久关闭防火墙

5.JDK与Hadoop的安装

下载JDK8
下载Hadoop3-binary
下载完毕将文件传到主机中。

在/usr/local/下创建java文件夹,并将JDK解压至该文件夹下。
在根目录下创建/bigdata文件夹,并将Hadoop解压至其中。

1
解压命令 tar -zxv -f [原压缩文件.tar.gz] -C [目标文件夹目录] # 实际命令没有中括号,其次,命令参数重-z对应gz压缩文件,若为bz2则使用-j

在JDK解压完成后,在~/.bash_profile中配置环境变量 点这里看/etc/bashrc、/.bashrc、/.bash_profile关系

1
2
export JAVA_HOME=/usr/local/java/jdkx.x.x_xxx
export PATH=$PATH:$JAVA_HOME/bin

配置完成,保存退出并 source ~/.bash_profile

hadoop无需配置环境变量

6.配置hadoop

在hadoop的home下,进入etc文件夹,有五个主要的文件需要进行配置:

1
2
3
4
5
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml

基本配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
1.配置 hadoop-env.sh
export JAVA_HOME
#找到该处,填写上上面配置的JAVA_HOME,因为hadoop是基于Java的,需要Java的环境

2.配置 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hostnameXXX:9000</value>
</property>
<!-- 配置hadoop文件系统目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/bigData/tmp</value>
</property>
</configuration>

3.配置 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

4.配置 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

5.配置 yarn-site.xml
<configuration>
<property>
<name>yarn.resourecemanager.hostname</name>
<value>hostnameXXX</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

然后配置相关服务启动过程中需要的配置变量:
进入${HADOOP_HOME}/sbin中,在start-dfs.sh与stop-dfs.sh中添加字段:

1
2
3
4
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

在start-yarn.sh与stop-yarn.sh中添加:

1
2
3
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

配置完成以后,进行hadoop的文件系统格式化,执行

1
${HADOOP_HOME}/bin/hdfs namenode -format

最后是启动服务:

1
执行${HADOOP_HOME}/sbin/start-all.sh  # 他会去调用start-dfs.sh与start-yarn.sh

根据配置中我们都是配置的root用户,显然需要我们以root身份进行,且过程中需要root密码。当然,通过ssh免密可以方便很多。启动完成以后,命令行中使用jps命令打印Java进程,会看到下图五个进程(忽略Jps进程):
jps.png
当然,Hadoop在服务启动以后以提供web端:

1
2
3
4
visit hdfs manage page
xxx.xxx.xxx.xxx:50070
visit yarn manage page
xxx.xxx.xxx.xxx:8088

最近开始学习Spring,在看《Spring实战4th》3.3“处理自动装配的歧义性”那一部分时,书上提到(也从网上看到了类似的用法):
通过在一个类上加注@Component以及@Qualifier(“x”)可以为其配置限定符来标识区分同一个接口下的不同实现类,用以在需要进行@Autowired自动装配的地方使用@Qualifier(“x”)来指定特定的实现类对象bean。

尽管从Mac的Terminal可以看出,macOS与UNIX、Linux或多或少都有血缘关系(shell、bash等),但是在mac进行Linux开发,或者把macOS直接当作Linux来使用依然是说不过去的,这其中包括一些命令行的使用,一些基本的文件夹体系等(如,在Linux上的/home目录与在macOS下的/Users)不一致。如果想要在macOS上进行Linux的学习,或者进行Linux开发,最完美的方案自然是安装虚拟机。

众所周知,在Java中,存在着值比较与应用比较两种情况。例如,如下的比较,可以根据值比较与引用比较来跟容易的判断出结果来:

1
2
3
4
5
6
int a = 123;
int b = 123;
String s1 = new String("123");
String s2 = new String("123");
System.out.println(a == b); //true
System.out.println(s1 == s2); //false

这里,a与b由于是基本类型,所以Java在比较的时候直接就是按值来比较,而下面的s1与s2则是由于分别指向内容为“123”的字符串对象引用(关于string的细节,见本人的另一篇文章),而这两个字符串的地址并不一样,所以结果是false。

那么,今天要讨论的是,对于Java自动拆装箱的问题的深入探讨。如下所示,请问结果是什么呢?

1
2
3
Integer a = 666;
Integer b = 666;
System.out.println(a == b);

结果是false,您可能会说,这有什么好问的,Integer对象的比较,引用的比较,而这两个只是值相同,而对象不同的Integer对象罢了,所以当然为false。好,那么我再问你,下面的结果是什么?

1
2
3
Integer a = 100;
Integer b = 100;
System.out.println(a == b);

您可能说,哇,当我傻吗,当然还是false了。可是,结果是true。

为什么同样的情况下,当值变小了,结果就变为true了呢。

其实,Java中,对于可装箱的对象类型,都存在一个1字节的范围:-128到127。在这个范围类的数字,Java认为是常用的数字,所以自动进行了值比较,而不是进行引用的比较。所以,无论是Long还是Integer,只有你的值在-128到127,这两个对象的比较直接按照其所存储的值来进行。就像如下的情况:

1
2
3
4
5
6
7
8
9
10
11
12
Integer a = 128;
Integer b = 128;
Integer c = 127;
Integer d = 127;
Long e = -129L;
Long f = -129L;
Long g = -128L;
Long h = -128L;
System.out.println(a == b); //false
System.out.println(c == d); //true
System.out.println(e == f); //false
System.out.println(g == h); //true

关于String相关内容的学习,历来都是Java学习必不可少的一个经历。

以前一直想要好好总结一下String的相关的知识点,苦于没有时间,终于在今天有一个闲暇的时间来好好总结一下,也希望这文章能够加深我对于String相关内容的理解(ps:在我看来,学习某些知识点的时候把学到的想到的都记录下一方面能够加深自己学习印象,二者能够锻炼锻炼我的文笔

曾几何时,我也是记得MySQL root密码的人,想要修改root密码还不是轻而易举的事?下面前三种修改改方式都是在记得密码的情况下进行修改,如果你忘记了原本的root,请直接跳至 终极

  1. 第一阶段:JavaSE(Java基础部分)
  • Java开发前奏
    计算机基本原理,Java语言发展简史以及开发环境的搭建,体验Java程序的开发,环境变量的设置,程序的执行过程,相关反编译工具介绍,java开发工具Eclipse的安装和使用,javadoc的说明。
  • Java基础语法
    Java语法格式,常量和变量,变量的作用域,方法和方法的重载,运算符,程序流程控制,数组和操作数组的类,对数组循环遍历以及针对数组的常用查找、排序算法原理,最后使用Java程序进行功能实现。
  • 面向对象编程
    理解对象的本质,以及面向对象,类与对象之间的关系,如何用面向对象的思想分析和解决显示生活中的问题,并java程序的手段编写出来。如何设计类,设计类的基本原则,类的实例化过程,类元素:构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类,Java的垃圾对象回收机制。对象的三大特性:封装、继承和多态。子类对象的实例化过程、方法的重写和重载、final关键字、抽象类、接口、继承的优点和缺点。 对象的多态性:子类和父类之间的转换、父类纸箱子类的引用、抽象类和接口在多态中的应用、多态优点。常用设计模式如单利、模版等模式。什么是异常 异常的捕捉和抛出 异常捕捉的原则 finally的使用,package的应用import关键字。
  • 多线程应用
    多线程的概念,如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、死锁问题的剖析。
  • JavaAPI详解
    JavaAPI介绍、String和StringBuffer、各种基本数据类型包装类,System和Runtime类,Date和DateFomat类等。常用的集合类使用如下:Java Collections Framework:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等常用集合类API。
  • IO技术
    什么是IO,File及相关类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应缓冲流和管道流,字节和字符的转化流,包装流,以及常用包装类使用,分析java的IO性能。
  • 网络编程
    Java网络编程,网络通信底层协议TCP/UDP/IP,Socket编程。网络通信常用应用层协议简介:HTTP、FTP等,以及WEB服务器的工作原理。
  • Java高级特性
    递归程序,Java的高级特性:反射、代理和泛型、枚举、Java正则表达式API详解及其应用。
  1. 第二阶段:数据库技术
  • ORACLE基础管理
    Oracle背景简介,数据库的安装,数据库的用户名和密码,客户端登录数据库服务SQLPLUS,数据库基本概。
  • SQL语句
    数据库的创建,表的创建,修改,删除,查询,索引的创建,主从表的建立,数据控制授权和回收,事务控制,查询语句以及运算符的详解,sql中的函数使用。
  • 多表连接和字查询
    等值和非等值连接,外连接,自连接;交叉连接,自然连接,using子句连接,完全外连接和左右外连接,子查询使用以及注意事项。
  • 触发器、存储过程
    触发器和存储过程使用场合, 通过实例进行详解。
  • 数据库设计优化
    WHERE子句中的连接顺序,选择最有效率的表名顺序,SELECT子句中避免使用 ‘ * ’计算记录条数等等。
  • 数据备份与移植
    移植技巧,备份方案;导入导出等。
  1. 第三阶段:JDBC技术
  • JDBC基础
    JDBC Connection、Statement、PreparedStatement、CallableStatement、ResultSet等不同类的使用。
  • 连接池技术
    了解连接池的概念,掌握连接池的建立、治理、关闭和配置。
  • ORM与DAO封装
    对象关系映射思想,JDBC的DAO封装,实现自己的JDBC。
  1. 第四阶段:WEB基础技术
  • XML技术
    使用jdom和dom4j来对xml文档的解析和生成操作,xml的作用和使用场合。
  • HTML/CSS
    Java掌握基本的html标签的格式和使用,css层叠样式表对div的定义,实现对网站布局的基本实现。
  • JavaScript
    了解javascript的基本语法以及相关函数的使用,并结合html页面实现流程控制和页面效果展示。什么是异常 异常的捕捉和抛出 异常捕捉的原则 finally的使用,package的应用import关键字。
  • JSP/Servlet
    Servlet和JSP技术、上传下载、Tomcat服务器技术、servlet过滤器和监听器。
  • JSTL与EL
    JSTL核心标签库、函数标签库、格式化标签库、自定义标签技术、EL表达式在jsp页面的使用。
  • AJAX及框架技术
    AJAX框架Jquery渲染页面效果和相关的强大的第三方类库,dwr如何和后台服务进行数据传输,以及页面逻辑控制等。
  • JSON高级应用
    Java使用JSON支持的方式对字符串进行封装和解析,实现页面和Java后台服务的数据通信。
  • Fckeditor编辑器
    FCKEditor在线编辑器技术、配置、处理图片和文件上传。
  • JavaMail技术
    了解域名解析与MX记录、电子邮件工作原理、邮件传输协议:SMTP、POP3、IMAP、邮件组织结构:RFC822邮件格式、MIME协议、邮件编码、复合邮件结构分析、JavaMail API及其体系结构、编程创建邮件内容:简单邮件内容、包含内嵌图片的复杂邮件、包含内嵌图片和附件的复杂邮件。
  • JfreeChart报表
    统计报表;图表处理。
  • BBS项目实战
    采用Jquery+dwr+jsp+servlet+Fckeditor+JfreeChart+tomcat+jdbc(oracle)完成BBS项目的实战。学完此实战你至少已经是拥有近1年开发经验的程序员了,但是你不应该满足现状,继续下去!
  1. 第五阶段:WEB主流框架技术(项目实战)
  • Struts2.x
    struts2框架的工作原理和架构分析,struts-default.xml与default.properties文件的作用,struts。Xml中引入多个配置文件。OGNL表达式、Struts2 UI和非UI标签、输入校验、使用通配符定义action、动态方法调用、多文件上传、自定义类型转换器、为Action的属性注入值、自定义拦截器、异常处理、使用struts2实现的CRUD操作的案例。
  • Hibernate
    Hibernate应用开发基础; ORM基础理论; 关系映射技术; 性能调优技术; 性能优化 一级缓存 二级缓存 查询缓存 事务与并发 悲观锁、乐观锁。
  • Spring4.x
    Spring IoC技术;Spring AOP技术;Spring声明事务管理;Spring常用功能说明,spring4.x的新特性,Spring整合Struts2和Hibernate3的运用。
  • Log4j与Junit
    Logging API;JUnit单元测试技术; 压力测试技术:badboy进行测试计划跟踪获取以及JMeter压力测试。
  • 在线支付技术
    完成支付宝的支付接口的在线支付功能。
  • 电子商务网站实战
    采用Spring4.x + Hibernate3 + Struts2 + Jquery + dwr + FckEditor + Tomcat完成电子商务网站实战开发。
  1. 第六阶段:WEB高级进阶(项目实战)
  • OpenJPA技术
    JPA介绍及开发环境搭建、单表实体映射、一对多/多对一、一对一、多对多关联、实体继承、复合主键、JPQL语句、EntityManager API、事务管理,了解一下jpa2.0的新特性以及应用。
  • Lucene搜索引擎
    了解全文搜索原理、全文搜索引擎、什么是OSEM、OSEM框架Compass、基于使用Lucene使用Compass实现全文增量型索引创建和搜索、探索Lucene 3.0以及API。
  • 电子商务重构
    此项目采用了Lucene+compass+openJpa+上一版电子商务网站的技术进行重构。
  • Excel/PDF文档处理技术
    Java对Excel和pdf文档分别利用poi和itext来进行解析和生成。此技术在企业级系统的报表中经常使用。
  • OA工作流技术JBPM
    工作流是什么、JBPM介绍、JBPM的主要用法、各类节点的用法、任务各种分派方式、JBPM的整体架构原理、工作流定义模型分析、运行期工作流实例模型分析、数据库表模型分析、流程定义管理、流程实例监控、对JBPM的相关接口进行封装,构建自己的工作流应用平台等。
  • WebService技术
    WebService技术原理、WebService技术的应用、Soap服务的创建与管理、WSDL描述文档规范、UDDI注册中心运行原理;使用Axis和Xfire创建WEB服务、Webservice客户端的编写、使用TCPMonitor监听SOAP协议、异构平台的整合。
  • Linux操作系统
    Linux系统安装,卸载、linux使用的核心思想、Linux下的用户管理,文件管理,系统管理、程序的安装,使用,卸载。Linux下作为server的基本应用:web服务器,j2ee服务器,ftp服务器的安装和项目的部署。
  • CRM项目实战
    此项目能了解和熟悉客户关系管理的基本流程以及功能的实现,采用上面几个阶段学到的主流框架实现,同时加入了JBPM的技术。!
  1. 第七阶段:大型高并发网站优化解决(项目实战)
  • 如何构建一个高性能网站详解
    什么样的网站需要高性能,高性能的指标体系,构建高性能网站需要做哪些工作,注意哪些细节。
  • SSI技术
    什么是SSI,使用他有什么好处,什么样的系统才使用SSI,SSI技术详解和使用,应用到项目中。
  • 静态页面生成技术
    什么是静态页,为什么需要静态页以及带来的好处,生成静态页的模版技术Velocity和Freemark,生成静态页的访问规则等。
  • 缓存技术
    为什么使用缓存技术,oscache缓存技术的介绍和使用,memcached缓存技术的介绍和使用、两者缓存技术的比较和如何去使用。
  • 经典WEb服务器
    什么是web服务器,什么是JavaWeb服务器,他们存在什么关系,当前技术主流中常用的Web服务器有哪些,WEB服务器Apache和Nginx的应用。
  • Nginx架构实战
    什么是反向代理,负载均衡以及集群,在Nginx中如何实现这些高性能的系统架构。