1. 集群结构(hadoop3.1.1 + zookeeper3.5.5 + hbase2.0.0 + spark2.3.4 + phoenix5.0.0)
类型 | zookeeper | Hbase | Spark | Phoenix | |
---|---|---|---|---|---|
master | NameNode | 否 | HMaster | Master | core+server jar包 |
slave1 | DataNode | 是 | HRegionServer | Worker | core+server jar包 |
slave2 | DataNode | 是 | HRegionServer | Worker | core+server jar包 |
slave3 | DataNode | 是 | HRegionServer | Worker | core+server jar包 |
2. hosts
文件
IP | hostname |
---|---|
10.18.218.241 | master |
10.18.218.242 | slave1 |
10.18.218.243 | slave2 |
10.18.218.244 | slave3 |
3. hadoop
安装
3.1 修改主机名(全部主机上实现)
vim /etc/hostname
将内容全删除后修改为:master(slave1\slave2\slave3同样操作)
3.2 查看当前host
:$ hostname
3.3 修改hosts文件(全部主机上实现)
vi /etc/hosts
修改为上述hosts文件,将ip和hostname作映射
3.4 关闭防火墙和selinux(使用root用户,全部主机进行该操作)
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
关闭selinux
vi /etc/selinux/config
将SELinux status参数设定为关闭状态
SELinux status: disabled
需要重启,需要重启,需要重启
3.5 建立hadoop用户(全部主机上实现)
useradd -m hadoop
passwd hadoop #123456(忽略警告)
usermod -a -G hadoop hadoop # 将hadoop用户移进hadoop用户组
cat /etc/group #查看用户组
3.6 为hadoop用户添加超级用户权限(全部主机上实现)
$ visudo
##在行 root ALL=(ALL) ALL下添加
%hadoop ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
并切换到hadoop用户:$ su hadoop
3.7 设置hadoop用户ssh免密通信
先对每个主机都生成rsa密钥,如生成master的rsa密钥
ssh-keygen -t rsa
后面都可以在master操作,将生成的rsa追加写入授权文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
给授权文件权限
chmod 600 ~/.ssh/authorized_keys
对本机ssh测试(第一次需要密码)
ssh master
将master上的authorized_keys传到slave1
sudo scp ~/.ssh/id_rsa.pub hadoop@slave1:~/
登陆连接到slave1进行操作:
ssh slave1
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
#修改权限
chmod 600 ~/.ssh/authorized_keys
#退出slave1
exit
进行免密测试
ssh slave1
其他主机同理
3.8 安装java(统一版本)
这里安装的版本为:jdk-8u211-linux-x64.tar.gz 编辑环境变量
vi ~/.bashrc
将java目录添加进环境
#java 1.8
JAVA_HOME=/usr/local/java/jdk1.8.0_211
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
查看JAVA环境变量
echo $JAVA_HOME
3.9 下载hadoop
下载3.1.1版本
3.10 解压
使用命令将解压放至home/hadoop 下,我的解压完后目录为:
/home/hadoop/hadoop-3.1.1
3.11 修改配置文件(都在hadoop/hadoop-3.1.1/etc/hadoop/目录下)
3.11.1 修改hadoop-env.sh文件
vi hadoop/hadoop-3.1.1/etc/hadoop/hadoop-env.sh
把JAVA_HOME添加进去
export JAVA_HOME=/usr/local/java/jdk1.8.0_211
3.11.2 修改 core-site.xml
fs.defaultFS
hdfs://master:9000/
hadoop.tmp.dir
/home/hadoop/hadoop-3.1.1/tmp
ha.zookeeper.quorum
slave1:2181,slave2:2181,slave3:2181
3.11.3 修改hdfs-site.xml
dfs.namenode.name.dir
/home/hadoop/hadoop-3.1.1/namenode
dfs.datanode.data.dir
/home/hadoop/hadoop-3.1.1/datanode
dfs.replication
1
3.11.4 修改 mapred-site.xml
mapreduce.framework.name
yarn
yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME=/home/hadoop/hadoop-3.1.1
mapreduce.map.env
HADOOP_MAPRED_HOME=/home/hadoop/hadoop-3.1.1
mapreduce.reduce.env
HADOOP_MAPRED_HOME=/home/hadoop/hadoop-3.1.1
3.11.5 year-site.xml
yarn.resourcemanager.hostname
master
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.zk-address
slave1:2181,slave2:2181,slave3:2181
3.11.6 修改workers
$ vi workers
# 添加如下内容
slave1
slave2
slave3
3.11.7 修改start-dfs.sh和 stop-dfs.sh文件
这两个文件在/usr/local/hadoop/hadoop-3.1.1/sbin/
中,分别在 start-dfs.sh
和 stop-dfs.sh
中添加如下内容
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=hadoop
HDFS_DATANODE_USER=hadoop
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=hadoop
HDFS_SECONDARYNAMENODE_USER=hadoop
3.11.8 start-yarn.sh文件和 stop-yarn.sh文件
这两个文件在 /usr/local/hadoop/hadoop-3.1.1/sbin/
中,分别在 start-yarn.sh
和 stop-yarn.sh
中添加如下内容
YARN_RESOURCEMANAGER_USER=hadoop
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=hadoop
3.11.9 配hadoop的环境变量
$ vi ~/.bashrc
export HADOOP_HOME=/home/hadoop/hadoop-3.1.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
更新环境变量:source ~/.bashrc
3.11.10 分发hadoop到其他主机
上面的操作要在每一个节点上都同步,但是一个一个的去编辑太麻烦了,可以用scp
命令,在 master
节点编辑好之后,直接发送给 slave
节点
scp -r /home/hadoop/hadoop-3.1.1 hadoop@slave1:/home/hadoop
scp -r ~/.bashrc hadoop@salve1:~/
后分别到其他节点更新环境变量source ~/.bashrc
即可。到这,可以启动hadoop,但我们到后面全安好后再启动。
4. 安装zookeeper(只在slave1/2/3三台主机上安装,以下在slave1上进行)
下载的版本为稳定版3.5.5解压至zookeeper文件夹
tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz -C /home/hadoop/zookeeper
编辑环境变量:vi ~/.bashrc
,添加下面的内容
#java 1.8
JAVA_HOME=/usr/local/java/jdk1.8.0_211
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
export HADOOP_HOME=/home/hadoop/hadoop-3.1.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#新加
export ZOOKEEPER_HOME=/home/hadoop/zookeeper/apache-zookeeper-3.5.5
export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
更新环境变量:source ~/.bashrc
4.1 配置zoo.cfg
需要将 需要将 $ZOOKEEPER_HOME/conf
目录下的zoo_sample.cfg
重命名为 zoo.cfg
cp $ZOOKEEPER_HOME/conf/zoo_sample.cfg $ZOOKEEPER_HOME/conf/zoo.cfg
默认为:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
tickTime: ZooKeeper 中使用的基本时间单元, 以毫秒为单位, 默认值是 2000。它用来调节心跳和超时。例如, 默认的会话超时时间是两倍的 tickTime。
initLimit: 默认值是 10, 即 tickTime 属性值的 10 倍。它用于配置允许 followers 连接并同步到 leader 的最大时间。如果 ZooKeeper 管理的数据量很大的话可以增加这个值。
syncLimit: 默认值是 5, 即 tickTime 属性值的 5 倍。它用于配置leader 和 followers 间进行心跳检测的最大延迟时间。如果在设置的时间内 followers 无法与 leader 进行通信, 那么 followers 将会被丢弃。
dataDir: ZooKeeper 用来存储内存数据库快照的目录, 并且除非指定其它目录, 否则数据库更新的事务日志也将会存储在该目录下。建议配置 dataLogDir 参数来指定 ZooKeeper 事务日志的存储目录。
clientPort: 服务器监听客户端连接的端口, 也即客户端尝试连接的端口, 默认值是 2181。
maxClientCnxns: 在 socket 级别限制单个客户端与单台服务器之前的并发连接数量, 可以通过 IP 地址来区分不同的客户端。它用来防止某种类型的 DoS 攻击, 包括文件描述符耗尽。默认值是 60。将其设置为 0 将完全移除并发连接数的限制。
autopurge.snapRetainCount: 配置 ZooKeeper 在自动清理的时候需要保留的数据文件快照的数量和对应的事务日志文件, 默认值是 3
autopurge.purgeInterval: 和参数 autopurge.snapRetainCount 配套使用, 用于配置 ZooKeeper 自动清理文件的频率, 默认值是 1, 即默认开启自动清理功能, 设置为 0 则表示禁用自动清理功能。
修改为:
ticketTime=2000
clientPort=2181
dataDir=/home/hadoop/zookeeper/apache-zookeeper-3.5.5/data
dataLogDir=/home/hadoop/zookeeper/apache-zookeeper-3.5.5/logs
initLimit=10
syncLimit=5
server.1=slave1:2888:3888
server.2=slave2:2888:3888
server.3=slave3:2888:3888
4.2 拷贝安装目录和环境变量到slave2/3服务器
scp .bashrc hadoop@slave2:~
scp -r /home/hadoop/zookeeper hadoop@slave2:/home/hadoop/
分别:source ~/.bashrc
4.3 在各自的安装目录下创建data文件夹,并生成myid在data文件夹中(三台服务器对应1/2/3)
mkdir data
cd data
echo "1" > myid
# 在slave2中则:echo "2" > myid
4.4 zookeeper配置完毕
可以启动,但等hbase安装完再一次启动
5. Hbase安装(在master上进行)
5.1 解压
下载版本:hbase2.0.0
tar -zvxf hbase-2.0.0-bin.tar.gz -C /home/hadoop
5.2 修改环境变量
vi ~/.bashrc
# 添加
export HBASE_HOME=/home/hadoop/hbase-2.0.0
export PATH=$HBASE_HOME/bin:$PATH
#更新变量
source ~/.bashrc
5.3 修改配置
5.3.1 修改 hbase-2.0.1/conf
目录下的hbase-env.sh
文件
export JAVA_HOME=/opt/jdk1.8.0_161
export HBASE_MANAGES_ZK=false
其中HBASE_MANAGES_ZK=false
表示我们使用自己安装zookeeper
集群而不是hbase
自带的zookeeper
集群
5.3.2 修改hbase-2.0.1/conf
目录下的hbase-site.xml
文件
hbase.rootdir
hdfs://master:9000/hbase
hbase.cluster.distributed
true
hbase.zookeeper.quorum
slave1,slave2,slave3
hbase.zookeeper.property.dataDir
/home/hadoop/zookeeper/apache-zookeeper-3.5.5/data
5.3.3 修改hbase-2.0.1/conf
目录下的regionservers
vi regionservers
# 将localhost删除,修改为附节点(注意一个节点占一行)
slave1
slave2
slave3
5.3.4 分发至其他主机(slave1/2/3)
scp ~/.bashrc hadoop@slave2:~
scp -r /home/hadoop/hbase-2.0.0 hadoop@slave1:/home/hadoop
分别更新:source ~/.bashrc
6. Spark安装(在主节点Mater上)
6.1 下载
地址:https://archive.apache.org/dist/spark/spark-2.3.4/SparkR_2.3.4.tar.gz
解压文件至目录:/home/hadoop/spark-2.3.4-bin-hadoop2.7
6.2 安装
6.2.1 编辑环境变量并添加 /etc/profile
#spark
export SPARK_HOME=/home/hadoop/spark-2.3.4-bin-hadoop2.7
export SPARK_CLASSPATH=$SPARK_HOME
export PATH=$PATH:$SPARK_HOME/bin
6.2.2 修改配置文件(安装目录的conf文件夹下)
将spark-env.sh.template
修改为spark-env.sh
SPARK_LOCAL_IP=master #本机ip或hostname
SPARK_MASTER_IP=master #master节点ip或hostname
export HADOOP_CONF_DIR=/home/hadoop/hadoop-3.1.2 #hadoop的配置路径
export YARN_CONF_DIR=/home/hadoop/hadoop-3.1.2 #yarn路径配置
将slave.template
修改为slaves
slave1
slave2
slave3
6.2.3 分发安装包和配置文件到slave节点
[hadoop@master ~]$ scp -r spark-2.3.4-bin-hadoop2.7 hadoop@slave1:/home/hadoop/
[hadoop@master ~]$ scp -r spark-2.3.4-bin-hadoop2.7 hadoop@slave2:/home/hadoop/
[hadoop@master ~]$ scp -r spark-2.3.4-bin-hadoop2.7 hadoop@slave3:/home/hadoop/
6.2.4 修改slave节点的在spark-env.sh
中SPARK_LOCAL_IP
选项
如slave1
:
SPARK_LOCAL_IP=slave1 #本机ip或hostname
SPARK_MASTER_IP=master #master节点ip或hostname
export HADOOP_CONF_DIR=/home/hadoop/hadoop-3.1.1 #hadoop的配置路径
export YARN_CONF_DIR=/home/hadoop/hadoop-3.1.1 #yarn路径配置
7. Phoenix安装(在主节点master上)
7.1 下载
下载apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz
并解压到/home/hadoop/apache-phoenix-5.0.0-HBase-2.0-bin
7.2 安装
复制phoenix安装目录下的phoenix-core-5.0.0-HBase-2.0.jar
和hoenix-5.0.0-HBase-2.0-server.jar
到hbase的lib目录下
[root@master apache-phoenix-5.0.0-HBase-2.0-bin]# cp phoenix-core-5.0.0-HBase-2.0.jar phoenix-5.0.0-HBase-2.0-server.jar /home/hadoop/hbase-2.0.0/lib/
7.3 分发jar包到slave节点
scp phoenix-core-5.0.0-HBase-2.0.jar phoenix-5.0.0-HBase-2.0-server.jar hadoop@slave1:/home/hadoop/hbase-2.0.0/lib/
7.4 修改配置文件 hbase-site.xml
将hbase安装目录下的conf目录下的hbase-site.xml
复制到phoenix安装目录下的bin目录中
cp hbase-site.xml /home/hadoop/app/apache-phoenix-5.0.0-HBase-2.0-bin/bin/
将hadoop安装目录下的etc/hadoop目录下的 core-site.xml
和hdfs-site.xml
文件复制到phoenix安装目录下的bin目录中
cp core-site.xml hdfs-site.xml /home/hadoop/app/apache-phoenix-5.0.0-HBase-2.0-bin/bin/
7.5 配置环境变量
vi /etc/profile
添加
#phoenix
export PHOENIX_HOME=/home/hadoop/apache-phoenix-5.0.0-HBase-2.0-bin
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PATH:$PHOENIX_HOME/bin
7.6 测试能否运行
cd /home/hadoop/apache-phoenix-5.0.0-HBase-2.0-bin/bin/
./sqlline.py
运行结果:
[root@master bin]# ./sqlline.py
Setting property: [incremental, false]
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix: none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/apache-phoenix-5.0.0-HBase-2.0-bin/phoenix-5.0.0-HBase-2.0-client.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-3.1.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
20/05/09 18:02:39 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Connected to: Phoenix (version 5.0)
Driver: PhoenixEmbeddedDriver (version 5.0)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)...
844/844 (100%) Done
Done
sqlline version 1.2.0
0: jdbc:phoenix:>
8. 启动
8.1 启动
8.1.1 启动 hadoop 之前在 master 上 format 名称节点(namenode节点,只需要第一次启动时进行)
cd /hadoop-3.1.1/bin
hdfs namenode -format
启动:journalnode
hadoop-daemon.sh start journalnode
8.1.2 在master上开启hadoop
:start-all.sh
# master上的进程
[hadoop@master ryan]$ jps
5505 SecondaryNameNode
6373 Jps
5782 ResourceManager
5942 NodeManager
5083 NameNode
# slave上的
[hadoop@slave1 ~]$ jps
3718 DataNode
3853 NodeManager
4095 Jps
8.1.3 分别在slave1/2/3上开启zookeeper
:zkServer.sh start
[hadoop@slave1 ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper/apache-zookeeper-3.5.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@slave1 ~]$ jps
4192 Jps
3718 DataNode
4150 QuorumPeerMain
3853 NodeManager
[hadoop@slave3 ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper/apache-zookeeper-3.5.5/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
8.1.4 在master启动hbase:start-hbase.sh
[hadoop@master ryan]$ start-hbase.sh
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/hbase-2.0.0/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-3.1.1/share/hadoop/common/lib/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 /home/hadoop/hbase-2.0.0/logs/hbase-hadoop-master-master.out
slave1: running regionserver, logging to /home/hadoop/hbase-2.0.0/logs/hbase-hadoop-regionserver-slave1.out
slave3: running regionserver, logging to /home/hadoop/hbase-2.0.0/logs/hbase-hadoop-regionserver-slave3.out
slave2: running regionserver, logging to /home/hadoop/hbase-2.0.0/logs/hbase-hadoop-regionserver-slave2.out
[hadoop@master ryan]$ jps
5505 SecondaryNameNode
6931 Jps
5782 ResourceManager
5942 NodeManager
5083 NameNode
6651 HMaster
[hadoop@slave1 ~]$ jps
4608 Jps
3718 DataNode
4150 QuorumPeerMain
3853 NodeManager
4303 HRegionServer
在master节点上启动thrift2(dpdk上传流量时使用)
cd /home/hadoop/hbase-2.0.0/bin/
./hbase-daemon.sh start thrift2
[hadoop@master ryan]$ jps
6512 ThriftServer
5505 SecondaryNameNode
6931 Jps
5782 ResourceManager
5083 NameNode
6651 HMaster
8.1.5 在master上启动spark:satrt-all.sh
cd /home/hadoop/app/spark-2.3.4-bin-hadoop2.7/sbin
./start-all.sh
[root@master bin]# jps
6512 ThriftServer
27843 HMaster
3527 SecondaryNameNode
3783 ResourceManager
1801 Jps
12346 Master
3278 NameNode
[root@slave1 zookeeper]# jps
18721 HRegionServer
2905 DataNode
8140 QuorumPeerMain
3021 NodeManager
12285 Jps
17374 Worker
6815 JournalNode
8.2 查看状态:
http://master:9870/ hdfs http://master:16010 hbase
http://master:8080/ spark
8.3 其他
8.3.1 新增节点:
在新节点上启动datanode $HADOOP_HOME/bin/hdfs --daemon start datanode
在新节点上启动nodemanager $HADOOP_HOME/bin/yarn --daemon start nodemanager
查看hdfs各节点状态 $HADOOP_HOME/bin/hdfs dfsadmin -report
查看yarn各节点状态 $HADOOP_HOME/bin/yarn node -list
8.3.2 打开datanode后闪退
cat /home/hadoop/hadoop-3.1.1/datanode/current/VERSION
#Wed Jun 05 15:36:39 CST 2019
storageID=DS-0c9cc045-55a0-496d-ad1a-a21e80d03b77
clusterID=CID-21311f72-47dc-4949-b740-077ead1e4ba9
cTime=0
datanodeUuid=c7437eac-3009-4938-afe0-5db675e60a11
storageType=DATA_NODE
layoutVersion=-57
查看slave2的,发现不一样,修改slave3 clusterID的,修改后可以查看节点
[hadoop@slave2 current]$ cat VERSION
#Wed Jun 05 16:17:01 CST 2019
storageID=DS-c0f1af27-a2ae-4977-aa32-7b319cc76760
clusterID=CID-59aaa59c-e67a-4dee-99ff-d47361c52a52
cTime=0
datanodeUuid=a34dd4a0-3ac5-472e-ab75-fcac8f90a885
storageType=DATA_NODE
layoutVersion=-57
8.3.3 注意各个节点的配置保持一致
9. 重启服务器后,再次启动存在的问题
直接启动:start-all.sh
查看:http://master:9870
启动正常 slave1/2/3 启动zookeeper zkServer.sh start
(3台都启动后) 使用:zkServer.sh status
会有节点是follower,有的是leader 此时,再查看: 查看:http://master:9870
保持正常 start-hbase.sh(master)
查看:http://master:16010
,无法打开网页 使用jps查看进程: master上HMaster开启失败,slave上的HRegionServer开启成功
查看日志:
java.lang.IllegalStateException:
The procedure WAL relies on the ability to hsync for proper
operation during component failures, but the underlying filesystem does not support doing so.
Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level
of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that
can provide it.
在master上修改: hbase-site.xml
增加配置
hbase.unsafe.stream.capability.enforce
false
再次启动: start-hbase.sh
,查看jps 存在HMaster进程,网页登陆:http://master:16010
,成功启动,问题解决,多查看日志